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 日开始。
- 无论如何,一年中的第 2 周从 1 月 8 日开始。
- 以此类推,除了一年中的第 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 |
+-----------------------------------+
我有一个数据集,它有一个缺少日期的日期变量。
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 日开始。
- 无论如何,一年中的第 2 周从 1 月 8 日开始。
- 以此类推,除了一年中的第 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 |
+-----------------------------------+