如何在Stata中转换日期?

问题描述 投票:0回答:2

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

但是,我们使用每日数据。有谁知道可以完成此操作的便捷方法吗?我得到的“日期”变量的格式如下:20111017 代表 2011 年 10 月 17 日。

我尝试使用

substr(date, 1, 4)
命令提取变量“日期”的前 4 个数字,但弹出消息“类型不匹配”。另外,如果我只使用年份来绘制每日数据(多年来),我不太确定它是否提供了正确的信息。现在它给出了以下 graph,看起来不太好。

date time-series stata finance line-plot
2个回答
1
投票

回答你标题中的问题。

date()
函数需要一个字符串。如果您的值为
20111017
的变量采用数字格式,您可以像这样转换它:
tostring datenum , gen(datestr)

然后,当使用

date()
函数时,您必须提供一个 mask 来告诉 Stata 日期字符串的格式。下面是一个可重现的示例,您可以运行看看它是如何工作的。

* Example generated by -dataex-. For more info, type help dataex
clear
input float datenum
20111016
end

* Convert numeric variable to string
tostring datenum , gen(datestr) 

* Convert string to date
gen date = date(datestr, "YMD")

* Display date as date
format date %td

如果这对您没有帮助,请尝试提供一个可重现的示例。


0
投票

这为@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 |
     +-----------------------------+

© www.soinside.com 2019 - 2024. All rights reserved.