如何使用 Stata 有效地创建滞后变量
How to efficiently create lag variable using Stata
我有面板数据(时间: 日期,名称: 代码)。我想为变量 x
和 y
创建 10 个滞后。现在,我使用以下代码一一创建每个滞后变量:
by ticker: gen lag1 = x[_n-1]
然而,这看起来很乱。
谁能告诉我如何更有效地创建滞后变量?
我应该使用循环还是 Stata 有更有效的方法来处理此类问题?
您可以循环执行此操作,但您也可以利用 tsrevar
生成临时滞后变量。如果需要永久变量,可以使用rename group
重命名。
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
请注意,如果您这样做是为了计算滚动 window 的统计数据,请查看 tsegen
(来自 SSC)
@Robert 向您展示了简化的方法。为了完成,这是"traditional",无聊的方式:
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
}
如果目的是创建滞后变量以在某些估计中使用它们,请知道您可以在许多估计命令中直接使用时间序列运算符;也就是说,不需要首先创建滞后变量。参见 help tsvarlist
。
我有面板数据(时间: 日期,名称: 代码)。我想为变量 x
和 y
创建 10 个滞后。现在,我使用以下代码一一创建每个滞后变量:
by ticker: gen lag1 = x[_n-1]
然而,这看起来很乱。
谁能告诉我如何更有效地创建滞后变量?
我应该使用循环还是 Stata 有更有效的方法来处理此类问题?
您可以循环执行此操作,但您也可以利用 tsrevar
生成临时滞后变量。如果需要永久变量,可以使用rename group
重命名。
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
请注意,如果您这样做是为了计算滚动 window 的统计数据,请查看 tsegen
(来自 SSC)
@Robert 向您展示了简化的方法。为了完成,这是"traditional",无聊的方式:
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
}
如果目的是创建滞后变量以在某些估计中使用它们,请知道您可以在许多估计命令中直接使用时间序列运算符;也就是说,不需要首先创建滞后变量。参见 help tsvarlist
。