我正在尝试根据具有随机变量名称的原始变量列表,以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'
}
答案 0 :(得分:1)
您需要告诉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' {
...
}
答案 1 :(得分:0)
@ 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)
这里有一个简单的权衡。
最后一个代码示例简单直接,一目了然,很容易看到已完成的工作。
但如果你不玩循环,你永远不会学习好技巧。
我不想输入任何(更多)更长的名单,但人们会在这里有不同的阈值。此外,您可能还有其他相同类型的问题,这使得母带制作循环技术更加重要。