遍历变量和年份
loop over variables and years
我正在尝试根据具有随机变量名称的原始变量列表生成 var
year 形式的变量。例如,基于第一个变量 E4252
,我将得到一个名为 var2013
的新变量;然后 var2011
,
var2009
、var2007
等等 var1999
。
这是我写的,但没有用:
local myvar "E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079"
local i = 2015
foreach x of myvar {
local i = `i' - 2
gen var`i' = `x'
}
您需要告诉 Stata myvar
是您循环中的局部变量:
local myvar "E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079"
local i = 2015
foreach x of local myvar {
local i = `i' - 2
gen var`i' = `x'
}
或者直接参考本地的内容:
foreach x in `myvar' {
...
}
@Dimitriy 的好答案的一些替代方法。
对于像这样的简短名称列表,您可以直接避免使用本地宏。这只是一个额外的间接级别。
为什么 generate
?听起来好像您正在采用一组更好的变量名称,因此 rename
可以避免在两组变量中重复相同的信息。
我将从使用的第一年开始,即 2013 年而不是 2015 年。
local i = 2013
foreach x in E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079 {
rename `x' var`i'
local i = `i' - 2
}
您可以一次性使用 rename
。
rename (E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079) (var2013 var2011 var2009 var2007 var2005 var2003 var2001 var1999)
这里有一个简单的权衡。
最后一个代码示例简单直接,一目了然。
但是如果你不玩循环,你永远学不会好的技术。
我不想输入任何(很多)更长的名称列表,但人们在这里会有不同的阈值。此外,您可能还有其他相同类型的问题,这使得掌握循环技术变得更加重要。
我正在尝试根据具有随机变量名称的原始变量列表生成 var
year 形式的变量。例如,基于第一个变量 E4252
,我将得到一个名为 var2013
的新变量;然后 var2011
,
var2009
、var2007
等等 var1999
。
这是我写的,但没有用:
local myvar "E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079"
local i = 2015
foreach x of myvar {
local i = `i' - 2
gen var`i' = `x'
}
您需要告诉 Stata myvar
是您循环中的局部变量:
local myvar "E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079"
local i = 2015
foreach x of local myvar {
local i = `i' - 2
gen var`i' = `x'
}
或者直接参考本地的内容:
foreach x in `myvar' {
...
}
@Dimitriy 的好答案的一些替代方法。
对于像这样的简短名称列表,您可以直接避免使用本地宏。这只是一个额外的间接级别。
为什么 generate
?听起来好像您正在采用一组更好的变量名称,因此 rename
可以避免在两组变量中重复相同的信息。
我将从使用的第一年开始,即 2013 年而不是 2015 年。
local i = 2013
foreach x in E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079 {
rename `x' var`i'
local i = `i' - 2
}
您可以一次性使用 rename
。
rename (E4252 E5219 E4693 E4102 E2803 E2046 E1462 E1079) (var2013 var2011 var2009 var2007 var2005 var2003 var2001 var1999)
这里有一个简单的权衡。
最后一个代码示例简单直接,一目了然。
但是如果你不玩循环,你永远学不会好的技术。
我不想输入任何(很多)更长的名称列表,但人们在这里会有不同的阈值。此外,您可能还有其他相同类型的问题,这使得掌握循环技术变得更加重要。