我有一个面板数据(时间:日期名称:自动收报机)。我想为x
创建最多10个滞后变量。所以我使用以下代码。
tsrevar L(1/10).x
rename (`r(varlist)') x_#, addnumber
因为我的数据是按小时计算的,而且只是在白天观察。使用上面的代码,缺少每个交易日的第一次观察。 我的替代解决方案是:
by ticker: gen lag1 = return[_n-1]
然后,我必须复制并粘贴此代码10次,这看起来非常混乱。谁能教我如何解决这个问题
答案 0 :(得分:0)
这是我的" 10分钟猜测"鉴于我实际上并没有使用比每日周期更精细的东西。
Stata没有我所知道的每小时显示格式。实现所需目标的一种方法是在delta()
数据时使用tsset
选项。
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()
本身有几个规格。看看并测试一下,看看你是否找到了更合适的效果。
(你提到了一个&#34;每小时的频率&#34;但是你没有提供具体细节的示例数据。真的无法确切知道你正在处理什么。)< / p>