循环变量和年份

时间:2016-08-03 03:43:56

标签: loops local stata

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

2 个答案:

答案 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)  

这里有一个简单的权衡。

  1. 最后一个代码示例简单直接,一目了然,很容易看到已完成的工作。

  2. 但如果你不玩循环,你永远不会学习好技巧。

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