各位看官,走过路过别错过了,今天小编给大家带来日期函数的大汇总啦!让我们通过例子一起来熟悉熟悉help文件中的日期函数和他们的用法吧!
一、year、halfyear、month、day、doy、quarter、week、dow函数的区别
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)
结果如下图所示:
由上图可以发现,例如1999年11月10日,通过year、month、day分别提取出了年、月、日,通过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—表示1961年1月1日与1960年1月1日隔了366天
clock(“1961-1-113:42”,”YMDhm”)=3.167e+10—表示1961年1月1日13点42分与1960年1月1日00:00:00.000相隔3.167e+10毫秒
(注意: Clock和colck的区别仅在于: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 //表示1961年1月1日转化为stata日期为366天
mdyhms(M,D,Y,h,m,s):从月,日,年,小时,分,秒中得到一个stata日期时间值。例如:
mdyhms(1,1,1961,1,1,1)=3.163e+10 //表示1961年1月1日1小时1分1秒转化为stata日期时间值为3.163e+10毫秒
hms(h,m,s):从1960年1月1日的小时,分,秒中得到一个stata日期时间值。例如:
hms(1,1,1)=3661000 //表示1960年1月1日1小时1分1秒转化为stata日期时间值为3661000毫秒
dhms(e_d,h,m,s):从日期,小时,分,秒中得到一个stata日期时间值。例如:
dhms(1,1,1,1)=90061000 //表示将距离1960年1月1日00:00:00.000为1天1小时1分1秒的此刻转化为stata日期时间值为90061000毫秒
(注意:Cdhms、Chms、Cmdyhms函数与dhms、hms、mdyhms函数的区别仅在于:前者所得结果经过闰秒调整,后者所得结果未经闰秒调整)
下面通过一个例子进行说明。
仍然沿用“一”中最后所得的数据,为了分析的需要,我们将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强宇曦
往期推文推荐:
7.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度
10.I have a Stata, I have a python
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
长按关注你懂得哦!
微信扫一扫
关注该公众号