深入理解Stata的week()函數

Stata中有一個日期的函數week(),能夠計算出日期對應的週數。

week(e_d)
Domain  e_d:       %td dates 01jan0100 to 31dec9999 (integers -679,350 to 2,936,549)
Range:             integers 1 to 52 and missing
Description:       returns the numeric week of the year corresponding to date e_d
          (the first week of a year is the first 7-day period of the year).
注意這裏紅色的字,表明了stata對應的周只是按照7天爲一組計算出來的,而且最大值爲52。於是,問題出現了:

1.每年的第一天並不一定是從週一開始,那麼機械的按照7天一組爲一個周是武斷而且錯誤的。

如下圖2008年爲例,可以看出,2008-1-1爲星期二,但stata仍然將1-1至1-7認爲是第一週

 
2.由於一年又365天(或366天閏年)。而52*7=364,而stata中week()函數的返回值最大爲52,那麼就意味着最後一週有超過7天的數值

以下圖2008年爲例,由於2008年爲閏年,導致了2008年的第52周有9天的數據


解決方法:(以2008至2011年日期爲例)

 

clear all
set obs 1461
gen trddt=date("2008-1-1","YMD")+_n-1
format trddt %tdCY-N-D
gen year=year(trddt)
gen week=week(trddt)
gen dow=dow(trddt)
sort trddt
by year ,sort: gen dow1=dow(trddt[1])
gsort year -trddt
by year,sort: replace week=week+1 if _n<=dow1
sort trddt
replace week=week+1 if dow<dow1
replace week=week-1 if dow==0
keep trddt year week dow
save week_adjustment.dta,replace


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章