Bookmark and Share

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


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From   Lucie Vlach <[email protected]>
To   "[email protected]" <[email protected]>
Subject   RE: st: RE: RE: Copying the contents of existing variables into a new variable
Date   Mon, 28 May 2012 13:09:06 -0600

Hello both!

I foolishly did not use the real data in my original example, thinking that I am simplifying, but that was a problem. Next time, real data!

I do not have control over the data I am using, the data comes from another place as an extraction from someone's database, so I am using:
insheet using "file\abc.000", delim("|") clear

I tried this "file\abc.000", delim("|") clear double  -- because double holds more accuracy (as per the referred article).

Then just to make sure:
recast double var1... var2
format  var1 %13.0f

But that did not work either when I try to generate the new variable, it's still changing the number to 699659136 again. [Using this command: gen newvar = max(var1, var2) if missing(var1, var2)]

I think my numbers are not getting imported/appended into Stata accurately in the first place? Are there problems with the insheet and anything special that needs to specified with appending datasets?

However, this works, even though it may not be the right way about it:
gen double newvar =.
replace newvar=699659108 if var1==699659108
replace newvar=571000128 if var2==571000128
format md %13.0f

I will need to do this with more appended datasets soon, so any advice of the best route is really appreciated.

Thank you!

Lucie




________________________________________
From: [email protected] [[email protected]] On Behalf Of Nick Cox [[email protected]]
Sent: May 24, 2012 5:48 PM
To: [email protected]
Subject: Re: st: RE: RE: Copying the contents of existing variables into a new variable

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 <[email protected]> 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 [[email protected] (mailto:[email protected])]

>> 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/

This message and any attached documents are only for the use of the intended recipient(s), are confidential and may contain privileged information. Any unauthorized review, use, retransmission, or other disclosure is strictly prohibited. If you have received this message in error, please notify the sender immediately, and then delete the original message. Thank you.

*
*   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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index