各位看官,走过路过别错过了,今天小编给大家带来日期函数的大汇总啦!让我们通过例子一起来熟悉熟悉
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强宇曦
长按关注你懂得哦!