首页 > 解决方案 > 创建周的自定义定义

问题描述

我有每日数据,并希望使用以下定义将它们转换为每周数据。每个星期一表示第 i 周的开始,周日表示第 i 周的结束。

我的日期变量被调用day并且已经具有%td格式。我有一种感觉,我应该使用这个dow()功能,结合egen, group()但我很难让它完全正确。

标签: stata

解决方案


如果您的数据是每周一次,并且您只有星期一的数据,那么您的日期变量很好,您需要做的就是声明delta(7)您是否使用tssetor xtset

如果您的数据是每周两天或更多天,并且您希望collapsecontract每周数据,那么您可以转换为合适的时间基础,如下所示:

* Example generated by -dataex-. To install: ssc install dataex
clear
input float date
22067
22068
22069
22070
22071
22072
22073
22074
22075
22076
22077
22078
22079
22080
end
format %td date


gen wdate = cond(dow(date) == 1, date, cond(dow(date) == 0, date - 6, date - dow(date) + 1))

format wdate %td
gen dow = dow(date) 
list, sepby(wdate)

     +-----------------------------+
     |      date   dow       wdate |
     |-----------------------------|
  1. | 01jun2020     1   01jun2020 |
  2. | 02jun2020     2   01jun2020 |
  3. | 03jun2020     3   01jun2020 |
  4. | 04jun2020     4   01jun2020 |
  5. | 05jun2020     5   01jun2020 |
  6. | 06jun2020     6   01jun2020 |
  7. | 07jun2020     0   01jun2020 |
     |-----------------------------|
  8. | 08jun2020     1   08jun2020 |
  9. | 09jun2020     2   08jun2020 |
 10. | 10jun2020     3   08jun2020 |
 11. | 11jun2020     4   08jun2020 |
 12. | 12jun2020     5   08jun2020 |
 13. | 13jun2020     6   08jun2020 |
 14. | 14jun2020     0   08jun2020 |
     +-----------------------------+

简而言之,按开始它们的星期一索引星期。现在collapsecontract您的数据集。当然,如果您有面板或纵向数据,也可能涉及一些标识符。delta(7)对于任何依赖tssetor的东西来说仍然是必不可少的xtset

egen使用映射到连续整数没有害处,但也没有优势。

一个潜在的主题是 Stata 自己的周是特殊的,总是从 1 月 1 日的第 1 周开始,并且在第 52 周总是有 8 或 9 天。有关 Stata 周的更多信息,请参阅此处此处的论文,其中包括在这个答案,还有更多。


推荐阅读