日期函数大汇总(一)

2016-11-17 谢慧蓉 爬虫俱乐部 爬虫俱乐部

各位看官,走过路过别错过了,今天小编给大家带来日期函数的大汇总啦!让我们通过例子一起来熟悉熟悉help文件中的日期函数和他们的用法吧!




一、yearhalfyearmonthdaydoyquarterweekdow函数的区别


year(e_d):表示从stata数值型日期中得到年份

halfyear(e_d)表示从stata数值型日期中得到当前日期属于该年的半年数(1表示上半年,2表示下半年)

month(e_d)表示从stata数值型日期中得到月份

day(e_d) 表示从stata数值型日期中得到当前日期在该月的日期数

doy(e_d) 表示从stata数值型日期中得到当前日期在该年的日期数

quarter(e_d)表示从stata数值型日期中得到当前季度

week(e_d)表示从stata数值型日期中得到当前日期为该年第多少个星期

dow(e_d)表示从stata数值型日期中得到当前日期为星期几


接下来我们通过一个例子具体分析。


首先我们通过cntrade命令调用浦发银行的历史市场报价,仅保留我们需要分析的date变量,命令如下:

cntrade 600000

keep date


可以发现date变量的类型为float,显示格式为%dCY_N_D,我们通过上述函数,就可以提取出date列日期的年、月、日等内容,命令如下:

gen year=year(date)

gen halfyear=halfyear(date)

gen month =month(date)

gen day =day(date)

gen doy =doy(date)

gen quarter =quarter(date)

gen week=week(date)

gen dow =dow(date)


结果如下图所示:



由上图可以发现,例如19991110日,通过yearmonthday分别提取出了年、月、日,通过halfyear提取出了该日处在该年的下半年,通过quarter提取出了该日处在该年第四季度,通过week提取出了该日处在该年第45周,通过doy提取出了该日为该年的第314天,通过dow提取出了该日为星期三。


二、halfyearly、quarterly、monthly、weekly、date、clock函数的区别


说明:在此类函数中,s1为字符型日期,s2为字符型日期年月日的顺序,[,Y]提供了一种处理两位数字年份的替代方式,当年份只有两位数时,年份为不能超过[ ,Y]的最大年份。例如:

date("1/15/08","MDY",1999),该年份为1908年。


halfyearly(s1,s2[,Y]):返回s1与1960年上半年相距的半年数

quarterly(s1,s2[,Y]):返回s1与1960年第一季度相距的季度数

monthly(s1,s2[,Y]):返回s1与1960年第一个月相距的月数

weekly(s1,s2[,Y]):返回s1与1960年第一个星期相距的星期数

date(s1,s2[,Y]):返回s1与1960年1月1日相距的天数

clock(s1,s2[,Y]):返回s1与1960年1月1日00:00:00.000相距的毫秒数


例如:

  • halfyearly(“1961-1”,”YH”)=2—表示1961年上半年与1960年上半年隔了2个半年数

  • quarterly(“1961-1”,”YQ”)=4—表示1961年第一季度与1960年第一季度隔了4个季度

  • monthly(“1961-1”,”YM”)=12—表示1961年第一个月与1960年第一个月隔了12个月

  • weekly(“1961-1”,”YW”)=52—表示1961年第一个星期与1960年第一个星期隔了52个星期

  • date(“61-1-1”,”YMD”,1999)=366—表示196111日与196011日隔了366

  • clock(“1961-1-113:42”,”YMDhm”)=3.167e+10—表示1961111342分与19601100:00:00.000相隔3.167e+10毫秒

注意 Clockcolck的区别仅在于:clock函数得到的毫秒未经闰秒调整,Clock函数得到的毫秒经过闰秒调整)


我们通过一个例子进行说明。


我们对上文“一”中所得数据再进行一个处理,得到符合“二”中要求的各种字符串形式的日期,处理过程如下:

tostring year halfyear month day quarter week,replace

gen halfyear1 =year+"-"+halfyear

gen quarter1 =year+"-"+quarter

gen month1 = year+"-"+month

gen week1 =year+"-"+week

gen date1 =year+"-"+month+"-"+day

keep halfyear1 quarter1 month1 week1 date1




接下来我们就通过上面介绍的函数来进行处理,命令如下:

gen halfyear =halfyearly(halfyear1,"YH")

gen quarter =quarterly(quarter1,"YQ")

gen month =monthly(month1,"YM")

gen week =weekly(week1,"YW")

gen date =date(date1,"YMD")

gen clock =clock(date1,"YMD")

drop halfyear1 quarter1 month1 week1




三、mdy、mdyhms、hms、dhms函数的区别


mdy(M,D,Y):从月,日,年中得到一个stata数值型日期。例如:

mdy(1,1,1961)=366 //表示196111日转化为stata日期为366


mdyhms(M,D,Y,h,m,s):从月,日,年,小时,分,秒中得到一个stata日期时间值。例如:

mdyhms(1,1,1961,1,1,1)=3.163e+10 //表示1961111小时11秒转化为stata日期时间值为3.163e+10毫秒


hms(h,m,s)196011日的小时,分,秒中得到一个stata日期时间值。例如:

hms(1,1,1)=3661000 //表示1960111小时11秒转化为stata日期时间值为3661000毫秒


dhms(e_d,h,m,s)从日期,小时,分,秒中得到一个stata日期时间值。例如:

dhms(1,1,1,1)=90061000 //表示将距离1960110000:00.00011小时11秒的此刻转化为stata日期时间值为90061000毫秒

注意CdhmsChmsCmdyhms函数与dhmshmsmdyhms函数的区别仅在于:前者所得结果经过闰秒调整,后者所得结果未经闰秒调整)


下面通过一个例子进行说明。


仍然沿用“一”中最后所得的数据,为了分析的需要,我们将quarter,week,dow看作hour,minute,second。

rename quarter hour

rename week minute

rename dow second

gen date1 =date

drop halfyear doy




准备就绪,接下来就能让函数们大显身手了

gen mdy =mdy(month,day,year)

gen mdyhms =mdyhms(month,day,year,hour,minute,second)

gen hms =hms(hour,minute,second)

gen dhms = dhms(date1,hour,month,second)


结果如图:



四、简单的时间换算函数


msofseconds(s)msofminutes(m)msofhours(h)函数分别将秒、分、小时换算成毫秒。


seconds(ms)minutes(ms)hours(ms)函数分别将毫秒转化为秒、分、小时


x

msofseconds(x)

msofminutes(x)

msofhours(x)

1

1000

60000

3600000

x

seconds(x)

minutes(x)

hours(x)

3600000

3600

60

1


是不是很想知道更多有关日期函数的内容呢?哈哈哈就不告诉你!除非你关注之后的推文!




说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场,点赞打赏,且随心意。今朝点滴,让我们更进一步;他年涌泉,更好的文章给更好的你。

编辑by强宇曦


往期推文推荐:

1.天路——chinafin与cntrade命令

2.分时数据,从此唾手可得

3.有了这个命令,以后还怕重复?

4.esttab功能挖掘:“Yes”or“No”

5.用“套路”处理数据

6.厉害了,我stata哥

7.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度

8.据说这样数据替换比较快,你试一下,然后……

9.众里寻她千百度,synth命令来帮助!

10.I have a Stata, I have a python

11.用subinfile修改文件,滚蛋吧,繁琐的命令君!

12.删繁就简三秋叶,subinfile似剪刀



此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

长按关注你懂得哦!

微信扫一扫
关注该公众号