Stata中的%tw格式的格式是: 1960w1,在R中没有等效的形式,因此%tw日期必须进行后置处理。
将.dta文件导入R中,日期为类似于1304 (而不是1985 w5)或1426 (而不是1987 w23)的整数。如果这是一个简单的时间序列,您可以按以下方式设置一个开始日期:
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日之间的完整七天周期的数目,再加上一个。周函数
在斯塔塔,任何一年的第一周都是从1月1日开始的,不管是哪一天。日期的Stata文档
在R中的日期%W格式中,周从星期一开始,作为一周的第一天。
从strptime %V是
按照ISO 8601的定义,一年中的一周为十进制数(00--53)。如果包含1月1日的一周(从星期一开始)在新的一年中有四天或更多天,那么它被认为是第一周。否则,它是前一年的最后一周,下一周是第一周。(接受,但在输入时被忽略。) Strptime。
拉马兰热在Github上指出,海文没有正确地解释日期:
月份、周、季度和半年是Stata的特定格式,分别为%tm、%tw、%tq和%th。我不确定R中是否有相应的格式,到目前为止,它们是作为整数导入的。
是否有方法将Stata %tw转换为R理解的日期格式?这是一个带有日期的Stata文件
发布于 2015-09-15 05:36:20
这将不是一个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日开始,而且第52周总是包括8天或9天,因此一个日历年从来没有第53周。
所以,你需要去上游,找出数据应该是什么。如果没有解释,我最好的建议是把每年的52周映射到开始的日子,即每个日历年的第1(7)358天。
Stata不会将一对一映射到,任何,其他用于定义周的方案。
关于这篇关于Stata weeks的文章的更多信息
发布于 2015-09-15 06:13:14
目前还不完全清楚问题是什么,但与1304相对应的年份和周是:
wk <- 1304
1960 + wk %/% 52
## [1] 1985
wk %% 52 + 1
## [1] 5
因此,假设一年的第一周是第一周,从1月1日开始,上述一周的开始日期是这个日期:
as.Date(paste(1960 + wk %/% 52, 1, 1, sep = "-")) + 7 * (wk %% 52)
## [1] "1985-01-29"
https://stackoverflow.com/questions/32587055
复制相似问题