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]
st: re: strange foreach loop result
From
"Airey, David C" <[email protected]>
To
"[email protected]" <[email protected]>
Subject
st: re: strange foreach loop result
Date
Wed, 15 Dec 2010 11:18:47 -0600
.
Thank you all for the rapid help and solution.
Ah, you are brilliant. That is exactly what happened. Got to be careful about quotes in Stata. I had forgotten the quotes and was indeed comparing the variable contents rather than the variable names. Thanks so much for that. I had been staring at it for over an hour.
>> David,
>>
>> I guess what you want to do is something like this:
>>
>> use result_pilot.dta, clear
>> keep slope lower upper ed50
>> foreach var of varlist slope lower upper ed50 {
>> if "`var'" == "slope" local myvar 1
>> if "`var'" == "lower" local myvar 2
>> if "`var'" == "upper" local myvar 3
>> if "`var'" == "ed50" local myvar 4
>> display "`var'", "`myvar'"
>> }
>>
>>
>> I.e. you want to compare the variable names, i.e. strings, not the values that the variables have. I guess both the variables slope and ed50 have the same values in the first observation, so you overwrite your local with 4 in the first loop run.
>> You can verify this easily
>>
>> di slope
>> di ed50
>>
>> which is equivalent to
>> di slope[1]
>> di ed50[1]
>>
>> best
>>
>> Klaus
>>
>>
>
> I'm getting a really strange foreach loop result I don't understand.
>
> In the first code snippet on fictitious data, I get what I want. In the second code snippit on the real data I get a strange result for when the condition:
>
> if `var' == slope local myvar 1
>
> is evaluated when `var' is slope. It produces the result myvar==4, when it should return myvar==1.
>
> Anyone have a clue where my error is?
>
>
> clear
> set obs 10
> gen a = 1
> gen b = 2
> gen c = 3
> gen d = 4
> foreach var of varlist a b c d {
> if `var' == a local myvar 1
> if `var' == b local myvar 2
> if `var' == c local myvar 3
> if `var' == d local myvar 4
> display "`var'", "`myvar'"
> }
>
> produces:
>
> a 1
> b 2
> c 3
> d 4
>
>
> use result_pilot.dta, clear
> keep slope lower upper ed50
> foreach var of varlist slope lower upper ed50 {
> if `var' == slope local myvar 1
> if `var' == lower local myvar 2
> if `var' == upper local myvar 3
> if `var' == ed50 local myvar 4
> display "`var'", "`myvar'"
> }
>
> produces:
>
> slope 4 <--weird, should be slope 1
> lower 2
> upper 3
> ed50 4
>
*
* 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/