Stata:基于局部变量列表创建变量

Stata:基于局部变量列表创建变量,stata,stata-macros,Stata,Stata Macros,我有一个如下所示的数据集: 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
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
    等提供

    如果实际数据是面板数据或纵向数据,则需要标识符和时间变量