這是我的「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()
本身有幾種規格。看看和測試,看看你是否找到更合適的。
(你提到的「小時工頻率」,但你不與具體給出的示例數據。實在沒有辦法確切知道你正在處理什麼用。)
我解決了這個循環使用,但請讓我知道是否有更好的解決方案 – fly36
重疊與http://stackoverflow.com/questions/31234458/how-to-efficiently-create-lag-variable-using-stata請不要重複非常類似的問題。 –
當然,如果您的觀察結果是小時和交易是白天活動,那麼當天第一次觀察的滯後就會丟失。您的解決方案將使用前一天的值作爲滯後時間。在當天的前10個時期,價值將來自前一天的最後10個時期。如果這就是你想要的,只需使用'bysort ticker(hour):gen period = _n'來重新定義時間。 –