Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: st: RE: RE: Copying the contents of existing variables into a new variable

 From Nick Cox To statalist@hsphsun2.harvard.edu Subject Re: st: RE: RE: Copying the contents of existing variables into a new variable Date Fri, 25 May 2012 00:48:13 +0100

```What I think you mean is that the value that was supposedly copied
from -var1- is not identical to what is in -newvar-.

As Ronnie says, this is a precision problem. You should read Bill's
blog and consider this demonstration:

. set obs 1

. gen newvar1 = 699659108

. gen double newvar2 = 699659108

. format newvar* %13.0f

. l

+-----------------------+
|   newvar1     newvar2 |
|-----------------------|
1. | 699659136   699659108 |
+-----------------------+

. format newvar* %21x

. l

+-----------------------------------------------+
|               newvar1                 newvar2 |
|-----------------------------------------------|
1. | +1.4d9f9c0000000X+01d   +1.4d9f9b2000000X+01d |
+-----------------------------------------------+

There aren't enough bits in a -float- to hold your number exactly.

I note that your original sample data did not show your problem.

On Thu, May 24, 2012 at 10:42 PM, Ronnie Babigumira <rb.glists@gmail.com> wrote:

> This may be useful http://blog.stata.com/2012/04/02/the-penultimate-guide-to-precision/

On Thursday, May 24, 2012 at 10:31 PM, Lucie Vlach wrote:
>
>> Hello again!
>> Thank you Nick and Ronnie!
>> egen newvar = rowmax(var1 var2) (from Ronnie) and your confirmation of my command is very helpful!
>>
>> But for some reason the var1 values are changed once they end up in var3. Var1 changes from the actual value of 699659108 (correct one) to 699659136. But the var2 (value of 571000128) stays correct in var 3.
>>
>> Var1 and var2 come from 2 appended 2 datasets (var 1 from dataset1 and var2 from dataset2), but I made sure that both variables are recasted as double before I try the var3 creation command.
>>
>> I also tested this all on someone else's computer using their Stata, just to make sure my Stata is working fine. The same problem happened there, too.
>>
>> Do I need the vars to be in certain format before I create var3?
>>
Nick Cox [n.j.cox@durham.ac.uk (mailto:n.j.cox@durham.ac.uk)]

>> The -generate- command you give is fine.
>>
>> . clear
>>
>> . input var1 var2
>>
>> var1 var2
>> 1. 345 .
>> 2. 345 .
>> 3. 345 .
>> 4. 345 .
>> 5. . 678
>> 6. . 678
>> 7. . 678
>> 8. . 678
>> 9. end
>>
>> . gen newvar = max(var1, var2) if missing(var1, var2)
>>
>> . l
>>
>> +----------------------+
>> | var1 var2 newvar |
>> |----------------------|
>> 1. | 345 . 345 |
>> 2. | 345 . 345 |
>> 3. | 345 . 345 |
>> 4. | 345 . 345 |
>> 5. | . 678 678 |
>> |----------------------|
>> 6. | . 678 678 |
>> 7. | . 678 678 |
>> 8. | . 678 678 |
>> +----------------------+
>>
>> It should not change the value of -var1-. If that happens, your copy of Stata is corrupted.

Lucie Vlach

>> I need to create a new variable that will copy data from other variables (2 or more) and combine them into the new one. The existing vars will only have a number or missing value.
>> I found something similar on this list, and I tried:
>>
>> gen newvar = max(var1, var2) if missing(var1, var2)
>>
>> But it's changing the value of var1.
>> I would like to see the newvar look like this:
>>
>> SAMPLE DATA:
>> var1 var 2 newvar
>> 345 . 345
>> 345 . 345
>> 345 . 345
>> 345 . 345
>> . 678 678
>> . 678 678
>> . 678 678
>> . 678 678
>> ETC
>> (I use Stata/IC 11.2)
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```