首页 > 解决方案 > 将 R 文件保存到 Stata,同时保留日期时间格式

问题描述

嗨,我需要将文件从 RDS 保存到 Stata。

我有多个 .RDS 格式的文件,我想将它们全部保存为 stata (.dta) 格式。我使用 write.dta() 保存,但是当我在 stata 中打开时,我意识到我的日期时间是错误的,我无法将其转换回来

即我在R中有一个名为“datetime”的变量,它以这种格式显示日期和时间(2019-09-13 00:12:00)

当我以 stata 格式保存文件时,我希望能够取回这个日期时间。

我应该如何保存文件以便我可以保留日期时间格式。谢谢!

标签: rstata

解决方案


write.dta()函数的文档中:

除非通过参数 convert.dates = FALSE 禁用,否则 R 日期和日期时间对象(PO​​SIXt 类)将转换为 Stata 日期格式,即自 1960 年 1 月 1 日以来的天数。(对于日期时间对象,这可能会丢失信息。)Stata 可以被告知这些是日期

format xdate %td;

可以将 POSIXct 类的对象传递给 Stata,以将其视为其日期时间版本之一。Stata 使用自 1960-01-01 以来的毫秒数,不包括(格式 %tc)或计数(格式 %tC)闰秒。因此,可以使用 convert.dates = FALSE 将 POSICct 类的对象传递给 Stata 并在 Stata 中进行转换,或者在传递给 write.dta 并分配格式 %tc 之前添加 315619200 然后乘以 1000。Stata 对第一条路线的评论位于http://www.stata.com/manuals13/ddatetime.pdf,但在撰写本文时是错误的:R 使用 POSIX 约定,因此不计算闰秒。

另一种方法是在写入 Stata 之前将日期时间变量格式化为字符。这可以通过以下方式完成:

aDateTime <- as.POSIXct("2020-05-28 13:00:00")

aDateTime

> aDateTime
[1] "2020-05-28 13:00:00 EDT"
> 

现在我们有了一个日期时间对象,让我们使用strftime()函数将其转换为字符。

# convert to string
strftime(aDateTime,"%Y-%m-%d %H:%M:%S")

...和输出:

> # convert to string
> strftime(aDateTime,"%Y-%m-%d %H:%M:%S")
[1] "2020-05-28 13:00:00"
>

推荐阅读