# st: RE: Question about a loop

 From "Nick Cox" <[email protected]> To <[email protected]> Subject st: RE: Question about a loop Date Tue, 5 Jul 2005 22:13:35 +0100

```I don't know what

local x 1

is doing here, but it seems irrelevant anyway. Your
main point is the mapping from num1-num10 to op1-op10.

One way to do this is

forval i = 1/10 {
gen op`i' = sum(ret) if inlist(num`i',-1,0,1)
}

As far as I can guess, that's also the best way
to do it in your problem.

Another way to do it is

foreach v of var num* {
local V : subinstr local v "num" "op"
gen `V' = sum(ret) if inlist(`v',-1,0,1)
}

An advantage of that is that it will work
nicely for an irregular list, e.g. num1, num3, num7,
num42 for which you want op1, op3, op7, op42.

Nick
[email protected]

Cameron Hooper

> Say I have 10 variables named: num1, num2, ..., num10. I want to loop
> over these variables and create 10 new ones named: op1, op2,
> ..., op10.
> The following works:
>
> local x 1
> foreach var of varlist num* {
> 	gen op`i' = sum(ret) if inlist(num`i',-1,0,1)
> 	local i = `i' + 1
> }
>
> I was originally thinking of accessing each of the num* variable's
> name, extracting the last digit and appending this to the
> stub 'op' and
> thus create a new variable. But I don't know to access a variables
> name. Can such a thing be done? Can anyone suggest a better way of
> executing this code?

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```