如何使用Stata高效地创建滞后变量

如何使用Stata高效地创建滞后变量,stata,Stata,我有面板数据(时间:日期,名称:股票代码)。我想为变量x和y创建10个滞后。现在,我使用以下代码逐个创建每个滞后变量: by ticker: gen lag1 = x[_n-1] 然而,这看起来很混乱 有人能告诉我如何更有效地创建滞后变量吗 我应该使用循环还是Stata有更有效的方法来处理此类问题?您可以使用循环,但也可以利用tsrevar来生成临时滞后变量。如果需要永久变量,可以使用重命名组对其进行重命名 clear set obs 2 gen id = _n expand 20 bysor

我有面板数据(时间:日期,名称:股票代码)。我想为变量
x
y
创建10个滞后。现在,我使用以下代码逐个创建每个滞后变量:

by ticker: gen lag1 = x[_n-1]
然而,这看起来很混乱

有人能告诉我如何更有效地创建滞后变量吗


我应该使用循环还是Stata有更有效的方法来处理此类问题?

您可以使用循环,但也可以利用
tsrevar
来生成临时滞后变量。如果需要永久变量,可以使用
重命名组
对其进行重命名

clear
set obs 2
gen id = _n
expand 20
bysort id: gen time = _n
tsset id time
set seed 12345
gen x = runiform()
gen y = 10 * runiform()
tsrevar L(1/10).x
rename (`r(varlist)') x_#, addnumber
tsrevar L(1/10).y
rename (`r(varlist)') y_#, addnumber

请注意,如果您这样做是为了计算滚动窗口上的统计数据,请查看
tsegen
(来自SSC)

@Robert向您展示了简化的方法。为了完成这项工作,这里有一种“传统的”无聊的方式:

clear
set more off

*----- example data -----

set obs 2

gen id = _n
expand 20

bysort id: gen time = _n
tsset id time

set seed 12345
gen x = runiform()
gen y = 10 * runiform()

list, sepby(id)

*----- what you want -----

// "traditional" loop
forvalues i = 1/10 {
     gen x_`i' = L`i'.x
     gen y_`i' = L`i'.y
}

list, sepby(id)
和一个组合:

// a combination
foreach v in x y {
    tsrevar L(1/10).`v'
    rename (`r(varlist)') `v'_#, addnumber
}
如果目的是创建滞后变量以在某些估计中使用它们,请知道可以在许多估计命令中直接使用时间序列运算符;也就是说,首先不需要创建滞后变量。请参阅帮助tsvarlist