首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊一聊Stata中时间变量的处理

对于初次接触统计软件的朋友来说,对于时间变量的处理,往往会有些不知所措。原因在于,统计软件,对时间变量的处理,与EXCEL并不一致,因此用惯了EXCEL的朋友,需要专门适应一下统计软件的处理方法。下面我们以Stata为例简析一下。

比如说,我们现在拿到了一个CPI同比的月度数据,如上图EXCEL表所示。用EXCEL可以很方便的做图等,但是我们现在把数据导入Stata之后,会发现时间列是红色,也就是说,在Stata看来,这列数据是文本格式,那么对时间作图等等,都是失败的。Stata会报错如下。

line cpi time

string variables not allowed in varlist;

time is a string variable

因此我们如果要在Stata中处理时间变量,第一件事就是要把文本格式的时间,转换成Stata可以识别的格式。转换的命令叫做date,其格式是:

date(s1,s2),其中s1是文本格式的时间变量,s2是文本格式时间的年月日的排列次序

比如说,例子中的1987-01,就是YM,如果是1987-01-01,那就是YMD。如果把1987-01-01缩写成87-01-01,那就用19YMD,在年份前面加上19。

现在我们运行命令:

gen timen = date(time, “YM”)

可以看到,新生成的时间变量timen,是一串整数,这是什么意思呢?第一,date这个命令识别的文本格式,是日度格式,如果原始数据是月份,比如1987-01,那么Stata会自动补充上日,默认为每个月的1号,即1987-01-01;第二,1987-01-01对应的9862,是指距离1960年1月1日的天数。

显然,这么一串数字,是不符合我们的阅读习惯的,我们需要把数字转换成我们易读的格式,那就要用的format命令,其格式是:

format timen %td

那么我们就看到,数字格式的时间,就转化成我们易读的格式,此时再作图,就没问题了。

运行:line cpi timen

如果我们并不需要日度时间,我们需要把日度时间,转换成月度时间,怎么操作呢?

如果直接使用format timen %tm,会有什么结果呢?我们来看看,显然是行不通的。2781m11,是把9862,转换成了距离1960年1月有9862个月的月份,那就成了2781年1月,显然不对。

此时我们需要日度时间,转换成月度时间,使用的命令是mofd,格式如下:

gen ti = mofd(timen)

此时,324的意思,是1987-01-01所在的月份,距离1960年1月的月数,我们再转换成易读的月份格式。

format ti %tm

我们再做个图看看,从下图可以看到,日期格式已经变成了月度。

我们最后总结一下,Stata中时间变量的处理。我们将EXCEL中的日期导入Stata之后,在Stata眼中,这是一个字符串,不会被识别。因此,第一步,我们要用date命令,将字符串形式的日期(日度数据),转换成Stata可以识别的日期,这是一串数字,是距离1960年1月1日的天数;第二步,这串数字,我们是不容易理解的,所以要用format命令,把这串数字转换成我们能看懂的日期;第三步,如果我们需要是月度、季度等日期,就用mofd、qofd命令,把距离1960年1月1日的天数,转换成距离1960年1月的月数或者季度数,再用format命令。

以上就是Stata中时间变量的处理的简单分析。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200122A0O96S00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券