Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

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.  

[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:

© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index