Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中对状态%tw日期进行后期处理_R_Date_Stata - Fatal编程技术网

在R中对状态%tw日期进行后期处理

在R中对状态%tw日期进行后期处理,r,date,stata,R,Date,Stata,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") 但如果每一行

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日之间发生的完整七天周期数,再加上一天

在Stata,任何一年的第一周都从1月1日开始,无论是哪一天

以R中日期的%W格式,一周从星期一开始,作为一周的第一天

从strTime开始%V是

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

Larmarange在Github上指出:

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

有没有办法将Stata%tw转换为R理解的日期格式?
就R代码而言,这并不是一个答案,但这是对《国家周》的评论,不能纳入评论中

严格地说,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 weeks不会将一对一映射到定义周的任何其他方案


更多信息参见

问题并不完全清楚,但与1304对应的年份和周是:

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

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