为自己打气加油 发表于 2019-9-27 16:23:37

深入理解Stata的week()函数

Stata中有一个日期的函数week(),能够计算出日期对应的周数。

week(e_d)
Domaine_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 allset obs 1461gen trddt=date("2008-1-1","YMD")+_n-1format trddt %tdCY-N-Dgen year=year(trddt)gen week=week(trddt)gen dow=dow(trddt)sort trddtby year ,sort: gen dow1=dow(trddt)gsort year -trddtby year,sort: replace week=week+1 if _n<=dow1sort trddtreplace week=week+1 if dow<dow1replace week=week-1 if dow==0keep trddt year week dowsave week_adjustment.dta,replace
页: [1]
查看完整版本: 深入理解Stata的week()函数