如何使用 tsrevar 使用 stata 创建滞后变量
how to use tsrevar to create lag variable using stata
我得到了一个面板数据(时间:日期名称:代码)。我想为 x
创建最多 10 个滞后变量。所以我使用下面的代码。
tsrevar L(1/10).x
rename (`r(varlist)') x_#, addnumber
因为我的数据是每小时一班,而且只在白天观察。使用上面的代码,缺少每个交易日的第一个观察值。
我的替代解决方案是:
by ticker: gen lag1 = return[_n-1]
然后,我不得不将这段代码复制粘贴10次,看起来很乱。谁能教我如何解决这个问题
这是我的“10 分钟猜测”,因为我实际上并没有使用比每日周期更精细的东西。
据我所知,Stata 没有每小时 显示格式。实现您想要的效果的一种方法是在 tsset
数据时使用 delta()
选项。
clear
set more off
*----- example data -----
// an "hour-by-hour" time series which really has millisecond format
set obs 25
gen double t = _n*1000*60
format %tcDDmonCCYY_HH:MM:SS:.sss t
set seed 3129745
gen ret = runiform()
list, sep(0)
*----- what you want? -----
// 1000*60 milliseconds conform 1 hour
tsset t, delta((1000*60))
// one way
tsrevar L(1/2).ret
rename (`r(varlist)') ret_#, addnumber
// two other ways
gen ret1 = L.ret
gen ret11 = ret[_n-1]
// check
assert ret_1 == ret1
assert ret_1 == ret11
list, sep(0)
tsset
还有一个generic
选项,delta()
本身有几个规格。看看并测试一下,看看是否找到更合适的。
(你提到了一个 "hourly frequency" 但你没有给出具体的示例数据。真的没有办法确定你在处理什么。)
我得到了一个面板数据(时间:日期名称:代码)。我想为 x
创建最多 10 个滞后变量。所以我使用下面的代码。
tsrevar L(1/10).x
rename (`r(varlist)') x_#, addnumber
因为我的数据是每小时一班,而且只在白天观察。使用上面的代码,缺少每个交易日的第一个观察值。 我的替代解决方案是:
by ticker: gen lag1 = return[_n-1]
然后,我不得不将这段代码复制粘贴10次,看起来很乱。谁能教我如何解决这个问题
这是我的“10 分钟猜测”,因为我实际上并没有使用比每日周期更精细的东西。
据我所知,Stata 没有每小时 显示格式。实现您想要的效果的一种方法是在 tsset
数据时使用 delta()
选项。
clear
set more off
*----- example data -----
// an "hour-by-hour" time series which really has millisecond format
set obs 25
gen double t = _n*1000*60
format %tcDDmonCCYY_HH:MM:SS:.sss t
set seed 3129745
gen ret = runiform()
list, sep(0)
*----- what you want? -----
// 1000*60 milliseconds conform 1 hour
tsset t, delta((1000*60))
// one way
tsrevar L(1/2).ret
rename (`r(varlist)') ret_#, addnumber
// two other ways
gen ret1 = L.ret
gen ret11 = ret[_n-1]
// check
assert ret_1 == ret1
assert ret_1 == ret11
list, sep(0)
tsset
还有一个generic
选项,delta()
本身有几个规格。看看并测试一下,看看是否找到更合适的。
(你提到了一个 "hourly frequency" 但你没有给出具体的示例数据。真的没有办法确定你在处理什么。)