Stata 中烦人的日期型数据的如何处理?

您所在的位置:网站首页 mdb文件转换dta Stata 中烦人的日期型数据的如何处理?

Stata 中烦人的日期型数据的如何处理?

2023-05-09 16:15| 来源: 网络整理| 查看: 265

写在前面:Stata 中的时间变量典型的比如日期,真正的取值是浮点型的数值。

. dis date("2020-10-10","YMD") 22198

即2020年10月10日这天,在Stata内部真实的取值是浮点数“22198”。

然后为了好看,我们通常将这个浮点数(日期型变量),转换为方便阅读的 td% 格式。

一、烦人的日期格式变量

要论日常遇到的数据类型中,哪种最复杂最麻烦?答案肯定就是日期型数据了。虽说一般的实证分析未必用到日期型变量,但是时间序列或者动态面板模型一定会需要和它打交道。尤其是间隔时间较小的时间序列,比如季度、月度、周、日、时和分秒等数据就更不好处理。一般来说,间隔约小,时间单位也就越小,处理起来就越麻烦。

一般数据来源中的日期型数据,通常都是字符型(string)。如果直接当成日期型来对待,Stata就会报错。

通常,我们处理以上字符型原始日期变量的步骤分为两步:第一步:将字符串型变量转换为Stata能识别的日期型变量 -- date或clock等转换函数第二步:指定该日期型变量的显示格式 -- format命令

下面我们结合具体案例,演示一下常见的处理过程。第一个案例的数据是“年月日+时分秒”的数据,第二个是常见的“年月日”日期型数据。

二、案例演示:具体到秒的时间变量

首先,导入原始的数据dta。这里TIMESTAMP变量取值是一个很长的时间格式,包括了“月/日/年 时/分/秒”。

接下来,我们尝试将它声明为日期型变量。Stata报错。

. tsset TIMESTAMP //出现错误。因为该变量是字符串型 string variables not allowed in varlist; TIMESTAMP is a string variable r(109);

这是因为这个变量本来就是字符型,不是日期型,不能直接当日期型变量使用。所以我们需要对这个变量进行转换。

TIMESTAMP变量转换使用clock函数

*第一步,通过clock函数转变为日期型变量 clear use "D:\0-data analysis\kmeans-300\OnlineAuction.dta" gen double eventtime = clock(TIMESTAMP, "MDYhms"), after(TIMESTAMP) *第二步,改变eventtime的显示格式 gen double eventtime_format = eventtime, after(eventtime) format eventtime_format %tc //以时钟型数据显示 *将三列数据进行对比。如下图 format eventtime %20.0f br TIMESTAMP eventtime eventtime_format

这里变量eventtime变量显示的是Stata眼中的真正变量取值(从1960年1月1日开始;Excel是1900年1月1日开始;R语言和Python是1970年1月1日开始;),eventtime_format只不过是改变了它的显示格式(Stata中真正的取值不变),让人类能直观地读懂。

一般来说,eventtime和eventtime_format两个变量都可以当成日期型变量使用,因为他们的本质是同一个东西。因为显示效果更直观,一般我们会使用eventtime_format这种形式的变量。

不过这里需要注意,eventtime_format变量即使已经变为日期型,依然不能声明它是时间序列的时间变量——因为它的取值不唯一。这时我们可以考虑对数据进行改造,比如使用collapse将同一时点的其它变量数据取均值,再使用。

如果不能声明为时间序列,就意味着我们不能使用像tsline这种简洁的命令绘制时间序列图。这个时候,我们可以考虑绘制散点图。比如我们绘制eventtime_format和PRICE的散点图,结果如下。

scatter PRICE eventtime_format

接下来,我们演示一个更常见的日期型变量的转换已以及格式化。

三、案例演示:常见日期变量

加入我们导入的日期型变量date为字符串,具体显示为2020-10-10,或者2020/10/10。还是和第二部分的案例处理步骤一样。通过date函数进行转换,再通过format指定显示格式。

*第一步,用过date函数将字符串型的日期变量,转换为真正的日起变量 gen date1 = date(date, "YMD") *第二步,通过format命令,改变date1日期型变量的显示格式 format date1 %td 四、其它:季度和月度变量

季度变量,通过quarterly函数进行转换,再通过format指定显示格式。

gen quart1 = quarterly(quart, "YQ") format quart1 %tq

月度变量,通过montyly函数进行转换,再通过format指定显示格式。

gen month1 = monthly(month, "YM") format month1 %tm

最后补充:对于长长地字符串型日期数据,可以用substr函数进行截取。

substr(var, 1, 4) 表示截取var变量的第一个字符,共截取4个。如果var取值是“2020-10-10”这种,截出来的就是“2020”的年份数据。接着进行转化+格式化,即可正常使用。

反之,对于分列的字符型日期变量,直接生成新变量,用+连接分开的变量即可。比如:

gen date = year + month + day

这里date就是一个长的字符串日期了。接着还是转换+格式化。

更多转换函数和日期格式,可参考Stata相关帮助文件。

References

Stata Date and time functions 帮助文件

-----全文结束----



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3