Stata:基于本地varlist创建变量

Stata: Creating Variables Based on local varlist

我有一个如下所示的数据集:

A B
0 1
0 1
0 1
1 0

我想为 t=1,2,3 创建新变量 A't' 和 B'',它们给出过去 1,2 和 3 期间的 A 和 B 值。我尝试了以下代码,但出现错误:“名称无效。

local status A B
    foreach x of local status {
    forvalues t=1/3 {
        gen "`x'"`t'="`x'"[_n-`t'] if _n>`t'
    }
    }

我想得到的结果如下:

A B  A1 A2 A3 B1 B2 B3
0 1  .  .  .  .  .  .
1 0  0  .  .  1  .  .
0 1  1  0  .  0  1  .
1 0  0  1  0  1  0  1

这个有效:

clear 
input A B
0 1
0 1
0 1
1 0
end 

foreach x in A B { 
    forval t = 1/3 { 
        gen `x'`t' = `x'[_n-`t']
    }
}

备注:

  1. 将两个变量名放入一个 local 中只是为了再次将它们取出没有害处,否则毫无意义。

  2. 双引号在此上下文中是错误的。

  3. if 限定符不会有任何坏处,但没有它你会得到相同的结果。

最关键的是,有经验的 Stata 用户不会这样做。前一个值、前两个值等等的想法只有在观察是按时间或另一个序列顺序时才有意义,在这种情况下,大多数分析都需要一个明确的类时间变量,比如

gen t = _n 

之后你可以去

tsset t 

然后滞后变量自动可用为 L1.A L2.A L3.A 等等。

如果您的真实数据是面板数据或纵向数据,那么您需要一个标识符和一个时间变量。