anythingtodate带你轻松处理日期
本文作者:朱巧利
文字编辑:张馨月
导读
在平时我们进行实证研究时,需要处理的数据中大多都包含日期,但通过excel或者其他途径导入的数据中包含的日期很多时候是Stata不能直接识别的字符型或者数值型变量,如果不将其转为Stata可识别的日期型变量,那么接下来的数据处理可能就无法继续进行。我们常用date()函数来进行日期的处理,但小编近日发现了一个同样非常好用的命令anythingtodate,它能让我们在处理数据中的日期时多一种选择,从而更加轻松,接下来让我们一起来看一下该命令如何使用吧~
基 本 介 绍
命令anythingtodate可以将作为字符串或长数字输入的日期变量转换为Stata可识别的日期型变量,也可将Stata格式中识别为数字的日期更改为日期格式。
其为外部命令,使用前需安装:
ssc install anythingtodate
基本语法:
anythingtodate varlist [, keepvarlists format(string asis) reference(integer 19000000) ]
varlist为需要进行转换的日期的变量名;通过使用keepvarlists选项,我们能够保留原始变量,避免原始变量被转换后的变量替换掉;通过使用format选项,我们可以指定Stata日期转换后的显示格式;通过使用reference选项,我们能够指定一个整数,如果变量的数字大于指定的数字,则认为此日期变量显示为长数字,默认的整数为19000000。
用 法 展 示
首先使用input命令输入我们接下来要展示的数据,并查看数据的类型:
clear
input str8 typestr long typelnum noformatdate
"20170101" 20170101 20820
"20180320" 20180320 21263
"20200202" 20200202 21947
end
des
结果如下:
可以看到变量typestr为字符型,变量typelnum与noformatdate为数值型。
接下来我们可以利用anythingtodate命令非常轻松的将三个变量变为日期型数据,为了更好的对比,我们在此保留原始变量:
anythingtodate typestr typelnum noformatdate,k
结果如下:
可以看到相应的变量都进行了转换,为了更加直观的看出区别,同样我们利用describe命令来查看一下转换后变量的格式:
通过anythingtodate命令,不管是字符型变量还是数值型变量都一举转换成了Stata可以识别的日期型变量,使用起来可以说是非常方便了。
我们还可以通过format(可简写为f)选项来选择自己喜欢或者所需要的日期格式,让数据看起来更加清晰美观:
anythingtodate typestr typelnum noformatdate,k format(%dCY-N-D)
结果如下:
一般我们不使用reference(可简写为r)选项,默认的整数19000000是最合适的,比如如果我们把这个整数设为19000,结果将会如何呢?让我们来一起看一下:
anythingtodate typestr typelnum noformatdate,k format(%dCY-N-D) reference(19000)
des
由于原始变量noformatdate中的每一个数字都大于19000,因此anythingtodate命令将其看作以长数字形式储存的日期,所以没有将它变成对应的如20170101的形式,此时又指定了转换后的格式,从而因无法识别其年月日而出现缺失值。
当然我们也可以通过date()函数来转换字符型的日期,再通过format来调整格式:
gen date = date(typestr,"YMD")
format %dCY-N-D date
可以看到能够达到同样的效果:
虽然结果相同,但利用anythingtodate可以两行程序并一行,让我们的程序更简洁。如果想要处理日期更轻松,就来试试anythingtodate吧!
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。