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

# Re: st: RE: Overlapping Loops

 From Nick Cox To statalist@hsphsun2.harvard.edu Subject Re: st: RE: Overlapping Loops Date Wed, 18 Jan 2012 21:16:00 +0000

```Working backwards, and using Scott's examples as well, you should learn that

1. -forvalues- needs to see a number in that position.

2. If you have the constants you need in variables, it is better
practice to put them in local macros.

3. If you have something like

local J = 10
forval j = 1/`J' {

that's OK because Stata evaluates the local macro before -forvalues-
gets to work and so -forvalues- sees

forval j = 1/10 {

and the rules about seeing numbers are satisfied.

Nick

On Wed, Jan 18, 2012 at 7:58 PM, Bader Alhashel <balhashel@gmail.com> wrote:
> Thanks for getting back to me Nick. Please bare with me as I am not
> quite affluent in Stata's programming.
>
> numberofpeople1 up to numberofpeople17 are numeric variables. Do you I
> need to define it?
>
> On Wed, Jan 18, 2012 at 2:45 PM, Nick Cox <n.j.cox@durham.ac.uk> wrote:
>> That's not a problem so far as I can see. Consider first time round the outer loop, so `i' = 1.
>>
>> The inner statements become
>>
>> gen ceo_photo1 = 0 if photo1==1
>>
>> forvalues j=1/numberofpeople1 {
>>        replace ceo_photo1=1 if ceo == name`j'_photo1 & ceo_photo1==0
>> }
>>
>> The thing that looks odd now is -numberofpeople1-. Tell us where you define it and what it is.
>>
>> Similarly, what are -numberofpeople2- ... -numberofpeople17-?
>>
>> Basically, it doesn't matter what they are, variables or scalars, as -forval- expects to see an actual number at that place. You could evaluate something on the fly, but that's a different technique.
>>
>> Nick
>> n.j.cox@durham.ac.uk
>>
>>
>> -----Original Message-----
>> From: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Bader Alhashel
>> Sent: 18 January 2012 19:27
>> To: statalist
>> Subject: st: Overlapping Loops
>>
>> I am trying to write two over lapping "foreach" loops however I keep
>> getting an invalid syntax error. I don't know why but I am guessing it
>> is because of the local macro in the first loop is not recognized in
>> the second loop. This is the code I am trying to run.
>>
>> forvalues i = 1/17 {
>> gen ceo_photo`i'=0 if photo`i'==1
>> forvalues j=1/numberofpeople`i' {
>> replace ceo_photo`i'=1 if ceo == name`j'_photo`i' & ceo_photo`i'==0
>> }
>> }
>>

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