如何在Stata中转换日期



我在互联网上寻求以下方面的帮助,但我找不到令人满意的答案:对于一项作业,我需要绘制某个变量的时间序列(以百分比表示的术语(,x轴上有年份。

然而,我们使用日常数据。有人知道这样做的方便方法吗?我得到的"日期"变量的公式如下:20111017表示2011年10月17日。

我试图使用substr(date, 1, 4)命令提取变量"date"的前4个数字,但弹出消息"type mismatch"。此外,如果我只使用年份来绘制(多年来的(每日数据,我不太确定它是否提供了正确的信息。现在它给出了下面的图表,看起来不太好。

回答标题中的问题。

date()函数需要一个字符串。如果值为20111017的变量是数字格式,则可以将其转换为:tostring datenum , gen(datestr)

然后,当使用date()函数时,您必须提供一个掩码,该掩码告诉Stata日期字符串的格式。下面是一个可复制的示例,您可以运行它来了解它的工作原理。

* Example generated by -dataex-. For more info, type help dataex
clear
input float datenum
20111016
end
* Convert numberic varaible to string
tostring datenum , gen(datestr) 
* Convert string to date
gen date = date(datestr, "YMD")
* Display date as date
format date %td

如果这对你没有帮助,试着提供一个可重复的例子。

这为@TheIceBear的有用答案添加了一些细节。

正如他所指出的,从一起跑步日期变量中获取Stata每日日期的一种方法是首先将其转换为字符串。但tostring只是实现这一点的一种方法,并不是必不可少的。(作为tostring的原作者,我并不反对它,但它更适合其他任务。(

这里我使用daily()而不是date():结果是相同的,但使用daily()是个好主意:date()经常被误解为通用日期函数,而它所做的只是生成每日日期(或缺失(。

要得到一个数字年份变量,只需除以10000并向下四舍五入即可。您可以转换为字符串,提取前4个字符,然后转换为数字,但这是更多的操作。

clear 
set obs 1 
gen long date = 20111017
format date %8.0f 
gen ddate = daily(strofreal(date, "%8.0f"), "YMD")
format %td ddate 
gen year = floor(date/10000)
list  
+-----------------------------+
|     date       ddate   year |
|-----------------------------|
1. | 20111017   17oct2011   2011 |
+-----------------------------+

相关内容

  • 没有找到相关文章

最新更新