时间函数(三)——如何处理字符型的时间数据
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
我们遇到的时间数据无非就这几种,年月日小时分钟秒、年月日小时分钟、年月日小时、年月日、半年、月度、季度。
我们可以通过help datetime translation 查看字符型时间函数,如下:
所涉及的时间函数有clock(s1,s2[,Y])、Clock(s1,s2[,Y])、date(s1,s2[,Y])、daily(s1,s2[,Y])、weekly(s1,s2[,Y])、monthly(s1,s2[,Y])、quarterly(s1,s2[,Y])、halfyearly(s1,s2[,Y])和yearly(s1,s2[,Y]),它们都是在计算从01jan1960 00:00:00.000到指定时间的各种时间格式的数据。
其中:s1为字符型时间变量,s2是某一种时间结构的符号组合,包括:Y、D、M、h、m和s,D代表日,M代表月份,Y代表年,h代表小时数,m代表分钟数,s代表秒数。这些符号的位置和字符时间数据中年月日小时分钟秒的位置要一一对应。举例,s1 = 2017/01/09 19:10 对应的s2为YMDhm。
Y,当年份中只有两位数时,你需要指定Y。我们看help文件中的例子:
给定Y之后,时间函数计算的时候,所使用的年数为不超过给定的Y,并且年份后两位是s2中Y对应的s1上的年份数。
例如date("1/15/08","MDY",2000),Y对应的是08,不超过2000年且年份后两位是08的最大年份为1908,所以时间函数计算的都是从01jan1960 00:00:00.000到15jan1908 00:00:00.000的天数。
本篇推文价绍clock(s1,s2[,Y])、date(s1,s2[,Y])、daily(s1,s2[,Y]),下一篇介绍weekly(s1,s2[,Y])、monthly(s1,s2[,Y])、quarterly(s1,s2[,Y])、halfyearly(s1,s2[,Y])和yearly(s1,s2[,Y])。
clock(s1,s2[,Y])、date(s1,s2[,Y])和daily(s1,s2[,Y])可以处理年月日小时分钟秒、年月日小时分钟、年月日小时、年月日这四类字符型数据。
我们以年月日小时分钟秒为例,通过系统时间生成字符型时间数据,然后通过以下几种途径实现字符型数据到数值型数据的转化。
clear
set obs 10
gen time = ""
forvalue i = 1(1) 10 {
replace time = "`c(current_date)' `c(current_time)'" in `i'
sleep `=uniform()*2000'
}
一、把数据转化成对应的毫秒数,然后转化成其他单位的时间数据
通过clock(s1,s2[,Y])生成对应毫秒数
gen double ms=clock(time, "DMYhms")
然后通过dofc与yofd、hofd、qofd、mofd、wofd分别结合生成对应的时间数据。
gen year = yofd(dofc(ms)) //先通过dofc(e_tc)计算天数,再通过yofd(e_d)计算对应的年数
gen halfyear=hofd(dofc(ms)) //先通过dofc(e_tc)计算天数,再通过hofd(e_d)计算对应的半年数
format %thCCYY!hh halfyear
gen quarter=qofd(dofc(ms)) //先通过dofc(e_tc)计算天数,再通过qofd(e_d)计算对应的季度数
format %tqCCYY!qq quarter
gen month=mofd(dofc(ms)) //先通过dofc(e_tc)计算天数,再通过mofd(e_d)计算对应的月度数
format %tmCCYY-NN month
gen week=wofd(dofc(ms)) //先通过dofc(e_tc)计算天数,再通过wofd(e_d)计算对应的周数
format %twCCYY!www week
二、把该数据直接转化成天数,其他的单位数据都可以通过之前学习的时间函数得到
通过date(s1,s2[,Y])或daily(s1,s2[,Y])函数得到Stata格式的日期,即01jan1960距今的天数。
gen day=date(time,"DMYhms")
gen day1=date(time,"DMYhm")
如果s2的定义(“DMYhm”)与前边s1中time的日期格式不一致(这里缺少s(秒)),结果就会出错,全为“missing”
然后,我们再通过之前学到的时间函数分别生成年份、半年、季度、月份、周。
gen year = yofd(day) //由天数数据计算年份
gen halfyear=hofd(day) //由天数数据计算半年
format %thCCYY!hh halfyear
gen quarter=qofd(day) //由天数数据计算季度数
format %tqCCYY!qq quarter
gen month=mofd(day) //由天数数据计算月度数
format %tmCCYY-NN month
gen week=wofd(day) //由天数数据计算周数
format %twCCYY!www week
本篇的内容先到此结束,谢谢大家阅读学习!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑/祁让坤
技术总编/刘贝贝
往期推文推荐:
5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件
6.putdocx+wordconvert—将实证结果输出到Word(.docx)文档
7.Stata 15之Markdown——没有做不到,只有想不到!
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部