设为首页收藏本站

EPS数据狗论坛

搜索
快捷导航
查看: 379|回复: 0

深入理解Stata的week()函数

[复制链接]

15

主题

140

金钱

227

积分

入门用户

发表于 2019-9-27 16:23:37 | 显示全部楼层 |阅读模式
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认为是第一周
1.png

2.由于一年又365天(或366天闰年)。而52*7=364,而stata中week()函数的返回值最大为52,那么就意味着最后一周有超过7天的数值
以下图2008年为例,由于2008年为闰年,导致了2008年的第52周有9天的数据
2.jpg

解决方法:(以2008至2011年日期为例)
  1. 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[1])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 下一条

客服中心
关闭
在线时间:
周一~周五
9:00-18:00
QQ群:
542280196
联系电话:
010-85786021-8014
在线咨询
客服中心

Powered by BFIT! X3.2© 2008-2018 BFIT Inc.

快速回复 返回顶部 返回列表