Stata中的%tw格式具有以下形式:1960w1,其在R中没有等价物.因此%tw日期必须进行后处理.
将.dta文件导入R,日期是一个整数,如1304(而不是1985w5)或1426(而不是1987w23).如果是一个简单的时间序列,您可以按如下方式设置开始日期:
ts(df, start= c(1985,5), frequency=52)
Run Code Online (Sandbox Code Playgroud)
另一种可能性是:
as.Date(Camp$date, format= "%Yw%W" , origin = "1985w5")
Run Code Online (Sandbox Code Playgroud)
但如果每一行都不是一个日期,那么你必须转换它.
包装ISOweek基于ISO-8601,形式为"1985-W05",不处理Stata%tw.
Lubridate包不适用于此格式.week()返回日期和1月1日之间发生的完整七天期间的数量加一.周功能
在Stata,任何一年的第1周从1月1日开始,无论是一周中的哪一天.关于日期的Stata文档
在R中日期的%W格式中,星期从星期一开始,作为一周的第一天.
从strptime%V是
一年中的一周为ISO 8601中定义的十进制数字(00--53).如果包含1月1日的一周(从星期一开始)在新的一年中有四天或更多天,那么它将被视为第1周.否则,它是前一年的最后一周,下一周是第1周.(接受但输入时忽略.)Strptime
Larmarange在Github上指出,Haven没有正确解释日期:
月,周,季度和半年是Stata的特定格式,分别为%tm,%tw,%tq和%th.我不确定R中是否有相应的格式.到目前为止,它们是作为整数导入的.
有没有办法将Stata%tw转换为日期格式R可以理解? 这是一个带日期的Stata文件
这不是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
Run Code Online (Sandbox Code Playgroud)
上面明确指出的一个微妙之处是改变显示格式不会改变存储的内容,即数值.
否则,Stata中的日期不是不同的数据类型; 它们只是整数,通过相关的显示格式可以理解为日期.
这个问题预先假定用Stata周描述一些每周日期是正确的.这似乎不太可能,因为我不知道StataCorp以外的机构使用Stata周规则的情况,不仅第1周总是从1月1日开始,而且第52周总是包括8天或9天,因此有从来没有在一个日历年的53周.
因此,您需要上游并找出数据应该是什么.如果没有一些解释,我最好的建议是将每年的52周映射到启动它们的日子,即每个日历年的第1天(7)358.
Stata周不会将一对一映射到定义周的任何其他方案.
更多 关于Stata周的文章