Bookmark and Share

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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: foreach and forvalues combined

From   Nick Cox <>
Subject   Re: st: foreach and forvalues combined
Date   Wed, 4 Jul 2012 15:19:37 +0100

Regardless of whether you are right, the first problem Stata will see is that

foreach i of sizep5 1/5

is not a legal syntax for -foreach-. Look again at the help. It seems
that what you want is just

foreach i of num 1/5

or (even simpler)

forval i = 1/5

Your inner loop seems unnecessary, as you would do the same thing
regardless of which year it was. Also is 1975/2012 what you intend
rather than 1976/2012?

More fundamentally, I doubt that even when you fix the Stata syntax
you will get what you want. My hunch is that you want to classify
firms according to what they were in 1975, and then spread the
classification to other years, but if so you won't do it like this.
Also, it seems odd that you keep no (apparent) track here of company

However, I won't try to guess what you want, not least because I could
be quite wrong. Nevertheless our problem is disentangling what you
want from your mistakes in Stata syntax. So my advice is to set your
syntax aside and show us a simple realistic example of what the data
look like now and what you want to get.

On Wed, Jul 4, 2012 at 3:02 PM, "Fabian Schönenberger" <> wrote:

> I am facing the following challenge with my panel data while trying the form different portfolios (double ranking with size and BM-ratio). After generating the variable sizebm5 with:
> generate sizebmp5=11 if bm<bm4 & sizep5==1 & timeyear==1975
> I want to loop the conditions sizep5== and timeyear==. Sizep5 is a variable consisting of numbers from 1 to 5 (1 small companies, 5 large companies). Timeyear is the time variable, 1975 to 2012. I am trying the following:
> . foreach i of sizep5 1/5 {
>   2. forvalues t = 1975/2012 {
>   3. replace sizebmp5=1`i' if bm<bm4 & sizep5==`i' & timeyear==`t'
>   4. }
>   5. }
> However Stata says invalid syntax. I guess the problem is with sizebmp5=1`i' -> 1 stands for the first condition bm<bm4 (I will change this condition manually and then switch to 2 and so on). With `i' I want the variable signalling the corresponding sizep5 portfolio. Because this variable changes from 1 to 5, I need the term `i'; I also tried 1_`i' but it did not work.

*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index