Stata中有一个日期的函数week(),能够计算出日期对应的周数。
week(e_d)
Domain
Range:
Description:
注意这里红色的字,表明了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