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: inexplicable foreach problem
From
A Loumiotis <[email protected]>
To
[email protected]
Subject
Re: st: RE: inexplicable foreach problem
Date
Thu, 14 Jul 2011 08:52:12 +0300
There is only one `i' in your foreach i in 2005/2010 loop...
foreach i in 2005/2010 {
di "`i'"
}
On Thu, Jul 14, 2011 at 7:03 AM, Joerg Luedicke
<[email protected]> wrote:
> Yes, this is a -forvalues- loop, like:
>
> forval i=2005/2010 {
> ...
> }
>
> On Wed, Jul 13, 2011 at 11:34 PM, Millimet, Daniel
> <[email protected]> wrote:
>> Given that you are looping over values, why not try forvalues instead?
>>
>> *******************************************
>> Daniel L. Millimet, Professor
>> Department of Economics
>> Box 0496
>> SMU
>> Dallas, TX 75275-0496
>> phone: 214.768.3269
>> fax: 214.768.1821
>> web: http://faculty.smu.edu/millimet
>> *******************************************
>>
>>
>> -----Original Message-----
>> From: [email protected] [mailto:[email protected]] On Behalf Of Jennifer S. Earl
>> Sent: Wednesday, July 13, 2011 10:29 PM
>> To: [email protected]
>> Subject: st: inexplicable foreach problem
>>
>> I am hoping someone else can give me some perspective on this. I have a
>> program in which I am using lots of foreach statements. For instance, here
>> is one that works (statement first and then log):
>>
>> Programming (pardon the wrapping text if you email program wraps the line):
>>
>> foreach i in 2005/2010 {
>> replace mod1_err013=eventid if population_`i'==. & sample_rate_`i'!=.
>> replace mod1_err013=eventid if population_`i'!=. & sample_rate_`i'==.
>> replace mod1_err013=eventid if population_`i'==. & man_weight_`i'!=.
>> replace mod1_err013=eventid if population_`i'!=. & man_weight_`i'==.
>> replace mod1_err013=eventid if sample_rate_`i'==. & man_weight_`i'!=.
>> replace mod1_err013=eventid if sample_rate_`i'!=. & man_weight_`i'==.
>> }
>>
>> Successful log entry:
>> . foreach i in 2005/2010 {
>> 2. replace mod1_err013=eventid if population_`i'==. &
>> sample_rate_`i'
>>> !=.
>> 3. replace mod1_err013=eventid if population_`i'!=. &
>> sample_rate_`i'
>>> ==.
>> 4. replace mod1_err013=eventid if population_`i'==. &
>> man_weight_`i'!
>>> =.
>> 5. replace mod1_err013=eventid if population_`i'!=. &
>> man_weight_`i'=
>>> =.
>> 6. replace mod1_err013=eventid if sample_rate_`i'==. &
>> man_weight_`i'
>>> !=.
>> 7. replace mod1_err013=eventid if sample_rate_`i'!=. &
>> man_weight_`i'
>>> ==.
>> 8. }
>> (0 real changes made)
>> (0 real changes made)
>> (0 real changes made)
>> (2 real changes made)
>> (0 real changes made)
>> (0 real changes made)
>>
>>
>> But, when I try to execute exactly the same foreach line after that, the
>> program doesn't try to iterate between 2005-2010;
>>
>> Unsuccessful programming:
>>
>> foreach i in 2005/2010 {
>> gen plus3000_`i'=0
>> replace plus3000_`i'=1 if sample_rate_`i'==98
>> replace plus3000_`i'=2 if sample_rate_`i'==99
>> }
>>
>> Here's what the trace shows is happening when it breaks (which reveals the
>> new variable is being named plus3000_2005/2010 instead of plus3000_2005):
>>
>> . foreach i in 2005/2010 {
>> 2.
>> . gen plus3000_`i'=0
>> 3.
>> . replace plus3000_`i'=1 if sample_rate_`i'==98
>> 4.
>> . replace plus3000_`i'=2 if sample_rate_`i'==99
>> 5.
>> . }
>> - foreach i in 2005/2010 {
>> - gen plus3000_`i'=0
>> = gen plus3000_2005/2010=0
>> / invalid name
>> replace plus3000_`i'=1 if sample_rate_`i'==98
>> replace plus3000_`i'=2 if sample_rate_`i'==99
>> }
>> r(198);
>>
>> I know its not a typo because I have copied and replaced the foreach line
>> from the good programming about 10 times to the same result. The only thing
>> in between the foreach loops that work and those that don't are some
>> comments and some egen statements.
>>
>> Any ideas on this one-- its a total mystery to me!
>>
>> Thanks,
>>
>> Jenn
>>
>> *********************************
>> Jennifer Earl
>> Professor of Sociology
>> SS&MS 3129
>> University of California, Santa Barbara
>> Santa Barbara, CA 93106-9430
>>
>> P: (805) 893-7471
>> F: (805) 893-3324
>> http://www.soc.ucsb.edu/faculty/earl/
>> *********************************
>> *
>> * 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/
>>
>> *
>> * 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/
>>
>
> *
> * 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/
>
*
* 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/