问题描述
我有一个如下所示的数据集:
A B
0 1
0 1
0 1
1 0
我想为 t=1,2,3 创建新变量 A't' 和 B't',它们给出过去 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']
}
}
注意事项:
-
将两个变量名放入一个
local
中只是为了再次取出它们没有害处,否则就毫无意义。 -
双引号在这种情况下是错误的。
-
if
限定符不会造成任何伤害,但如果没有它,您会得到相同的结果。
最重要的是,有经验的 Stata 用户不会这样做。前一个、前两个等值的想法只有在观察按时间或其他顺序顺序时才有意义,在这种情况下,大多数分析需要一个明确的类时间变量,例如
gen t = _n
之后你可以去
tsset t
然后滞后变量会自动作为 L1.A L2.A L3.A
等使用。
如果您的真实数据是面板或纵向数据,那么您需要一个标识符和一个时间变量。