深入理解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 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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值