遍历变量和年份

loop over variables and years

我正在尝试根据具有随机变量名称的原始变量列表生成 varyear 形式的变量。例如,基于第一个变量 E4252,我将得到一个名为 var2013 的新变量;然后 var2011, var2009var2007 等等 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)  

这里有一个简单的权衡。

  1. 最后一个代码示例简单直接,一目了然。

  2. 但是如果你不玩循环,你永远学不会好的技术。

  3. 我不想输入任何(很多)更长的名称列表,但人们在这里会有不同的阈值。此外,您可能还有其他相同类型的问题,这使得掌握循环技术变得更加重要。