Stata:按周汇总

Stata: Aggregating by week

我有一个数据集,它有一个缺少日期的日期变量。

var1
15sep2014
15sep2014
17sep2014
18sep2014
22sep2014
22sep2014
22sep2014
29sep2014
06oct2014

我使用此命令汇总了数据。

gen week = week(var1)

结果是这样的

var 1      week
15sep2014   37
15sep2014   37
17sep2014   38
18sep2014   38
22sep2014   38

我想知道是否可以在周变量中获取月份名称和年份。

我可能不会使用 week() 函数,而是使用 wofd() 函数将您的 %td 每日日期转换为 %tw 每周日期。然后你可以使用日期时间显示格式来决定如何格式化日期。例如:

gen date_weekly = wofd(var1)
format date_weekly %twww:_Mon_ccYY

该代码应该给你这个:

var1        date_weekly
15sep2014   37: Sep 2014
15sep2014   37: Sep 2014
17sep2014   38: Sep 2014
18sep2014   38: Sep 2014
22sep2014   38: Sep 2014

此帮助文件将很有用:

help datetime display formats

如果您想了解 %tw%td 日期之间的区别,您可以在这里刷新自己:

help datetime

一般来说,当且仅当您根据 Stata 的周规则定义周时,week() 才是解决方案的一部分。他们是

  1. 无论如何,一年中的第 1 周从 1 月 1 日开始。
  2. 无论如何,一年中的第 2 周从 1 月 8 日开始。
  3. 以此类推,除了一年中的第 52 周包括 8 或 9 天,具体取决于 年份是否是闰年。

你使用这些规则吗?我猜不会。那么最简单的做法就是以一周开始的哪一天来定义一周。如果您的周从周日开始,请使用规则 (dailydate - dow(dailydate))。如果您的周从星期一、...、星期六开始,请调整定义。

. clear 

. input str9 svar1

     svar1
1. "15sep2014"
2. "15sep2014"
3. "17sep2014"
4. "18sep2014"
5. "22sep2014"
6. "22sep2014"
7. "22sep2014"
8. "29sep2014"
9. "06oct2014" 
10. end 

. gen var1 = daily(svar1, "DMY") 

. gen week = var1 - dow(var1) 

. format week var1 %td 

. list

    +-----------------------------------+
    |     svar1        var1        week |
    |-----------------------------------|
 1. | 15sep2014   15sep2014   14sep2014 |
 2. | 15sep2014   15sep2014   14sep2014 |
 3. | 17sep2014   17sep2014   14sep2014 |
 4. | 18sep2014   18sep2014   14sep2014 |
 5. | 22sep2014   22sep2014   21sep2014 |
    |-----------------------------------|
 6. | 22sep2014   22sep2014   21sep2014 |
 7. | 22sep2014   22sep2014   21sep2014 |
 8. | 29sep2014   29sep2014   28sep2014 |
 9. | 06oct2014   06oct2014   05oct2014 |
    +-----------------------------------+

更多讨论here, here and here,尽管第一个应该足够了。