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/