【问题标题】:Post-Process a Stata %tw date in R在 R 中后处理 Stata %tw 日期
【发布时间】:2015-09-15 13:12:57
【问题描述】:

Stata 中的 %tw 格式为:1960w1,在 R 中没有等价物。 因此必须对 %tw 日期进行后处理。

将 .dta 文件导入 R,日期是一个整数,如 1304(而不是 1985w5)或 1426(而不是 1987w23)。如果它是一个简单的时间序列,您可以按如下方式设置开始日期:

ts(df, start= c(1985,5), frequency=52) 

另一种可能是:

as.Date(Camp$date, format= "%Yw%W" , origin = "1985w5") 

但是如果每一行不是一个日期,那么你必须转换它。

ISOweek 包基于 ISO-8601,格式为“1985-W05”,不处理 Stata %tw。

Lubridate 包不适用于这种格式。 week() 返回从日期到 1 月 1 日之间发生的完整 7 天周期数加一。 week function

在任何一年的 Stata 中,第一周从 1 月 1 日开始,无论是一周中的哪一天。 Stata Documentation on Dates

在 R 中 Date 的 %W 格式中,一周从星期一作为一周的第一天开始。

从 strptime %V 开始

ISO 中定义的以十进制数 (00--53) 表示的一年中的第几周 8601. 如果包含 1 月 1 日的一周(从星期一开始)在新的一年中有四天或更多天,则认为它是第 1 周。否则, 这是上一年的最后一周,下一周是第 1 周。 (接受但在输入时忽略。)Strptime

Larmarange 在 Github 上指出 Haven doesn't interpret dates properly

月、周、季度和半年是来自 Stata 的特定格式, 分别为 %tm、%tw、%tq 和 %th。我不确定是否有 R中可用的相应格式。到目前为止,它们被导入为 整数。

有没有办法将 Stata %tw 转换为 R 可以理解的日期格式? Here is an Stata file with dates

【问题讨论】:

    标签: r date stata


    【解决方案1】:

    这不是 R 代码的答案,但它是对 Stata 周的评论,无法放入评论中。

    严格来说,Stata 中的日期不是由人们可以理解的显示格式定义的。 Stata 中的日期始终是一个数字变量或标量或宏,定义为 1960 年的第一个实例。因此它充其量是谈论 %tw 日期等的简写。我们可以使用 display 来查看不同的效果日期显示格式:

    . di %td 0
    01jan1960
    
    . di %tw 0
     1960w1
    
    . di %tq 0
    1960q1
    
    . di %td 42
    12feb1960
    
    . di %tw 42
    1960w43
    
    . di %tq 42
    1970q3
    

    上面明确指出的一点是,更改显示格式不会更改存储的内容,即数值。

    否则,Stata 中的日期不是不同的数据类型;它们只是通过相关显示格式作为日期可以理解的整数。

    这个问题的前提是用 Stata 周数来描述一些每周日期是正确的。这似乎不太可能,因为我不知道 StataCorp 以外的机构使用 Stata 的周规则的实例,不仅第 1 周总是从 1 月 1 日开始,而且第 52 周总是包括 8 天或 9 天,因此有从来没有一个日历年的第 53 周。

    因此,您需要前往上游并找出数据应该是什么。如果没有一些解释,我最好的建议是将每年的 52 周映射到开始它们的日子,即每个日历年的第 1(7)358 天。

    Stata 周不会与任何其他用于定义周的方案一一对应。

    更多内容请关注this article on Stata weeks

    【讨论】:

      【解决方案2】:

      不完全清楚问题是什么,但1304对应的年份和星期是:

      wk <- 1304
      1960 + wk %/% 52 
      ## [1] 1985
      
      wk %% 52 + 1
      ## [1] 5
      

      所以假设一年中的第一周是第 1 周并且从 1 月 1 日开始,那么上述一周的开始就是这个日期:

      as.Date(paste(1960 + wk %/% 52, 1, 1, sep = "-")) + 7 * (wk %% 52)
      ## [1] "1985-01-29"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 2017-01-01
        • 1970-01-01
        相关资源
        最近更新 更多