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
Phil Clayton <[email protected]>
To
[email protected]
Subject
Re: st: RE: inexplicable foreach problem
Date
Thu, 14 Jul 2011 16:01:10 +1000
Yes, it should be:
foreach i of numlist 2005/2010 {
di "`i'"
}
See -help foreach-
Phil
On 14/07/2011, at 3:52 PM, A Loumiotis wrote:
> 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/
*
* 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/