【问题标题】:how to use tsrevar to create lag variable using stata如何使用 tsrevar 使用 stata 创建滞后变量
【发布时间】:2015-07-06 11:35:57
【问题描述】:

我得到了一个面板数据(时间:日期名称:股票代码)。我想为x 创建最多 10 个滞后变量。所以我使用下面的代码。

tsrevar L(1/10).x
rename (`r(varlist)') x_#, addnumber

因为我的数据是按小时计算的,而且只在白天进行观察。使用上面的代码,每个交易日的第一个观察结果都丢失了。 我的替代解决方案是:

by ticker: gen lag1 = return[_n-1]

然后,我得把这段代码复制粘贴10次,看起来很乱。谁能教教我如何解决这个问题

【问题讨论】:

  • 我使用循环解决了这个问题,但如果有更好的解决方案请告诉我
  • stackoverflow.com/questions/31234458/…重叠请不要重复非常相似的问题。
  • 当然,如果您的观察是每小时一次并且交易是白天活动,那么当天第一次观察的滞后就会消失。您的解决方案将使用前一天的值作为滞后值。对于一天的前 10 个时段,值将来自前一天的最后 10 个时段。如果这是您想要的,只需使用 bysort ticker (hour): gen period = _n 重新定义时间。

标签: stata


【解决方案1】:

这是我的“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() 本身有几个规范。看看和测试,看看你是否找到更合适的。

(你提到了“每小时频率”,但你没有给出具体的示例数据。真的没有办法确定你在处理什么。)

【讨论】:

    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多