You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Stata将日度面板数据转换为周一至周日的周度数据

解决Stata中周一至周日周度日期转换问题

问题背景

我有2019年1月1日至2022年6月30日的400款车型日度面板数据,需要转换成各车型的周度观测值。使用wofd()命令时发现,Stata默认的周划分是周二至周一,不符合我需要的周一至周日的周度区间需求。

原代码

format date %tdCCYY-NN-DD_Day
gen int week = wofd(date)
order week, after (date)
format week %twCCYY-WW

示例数据

car    date          week  milg fuelc
A1008   2019-01-01 Tue  2019-01 1   6
A1008   2019-01-02 Wed  2019-01 2   8
A1008   2019-01-03 Thu  2019-01 5   4
A1008   2019-01-04 Fri  2019-01 4   7
A1008   2019-01-05 Sat  2019-01 5   8
A1008   2019-01-06 Sun  2019-01 1   5
A1008   2019-01-07 Mon  2019-01 2   9
A1008   2019-01-08 Tue  2019-02 5   8
A1008   2019-01-09 Wed  2019-02 6   9
F2906   2019-01-01 Tue  2019-01 1   6
F2906   2019-01-02 Wed  2019-01 4   8
F2906   2019-01-03 Thu  2019-01 2   6
F2906   2019-01-04 Fri  2019-01 4   9
F2906   2019-01-05 Sat  2019-01 1   9
F2906   2019-01-06 Sun  2019-01 4   9
F2906   2019-01-07 Mon  2019-01 2   6
F2906   2019-01-08 Tue  2019-02 6   9
F2906   2019-01-09 Wed  2019-02 5   8
RR389   2019-01-01 Tue  2019-01 1   7
RR389   2019-01-02 Wed  2019-01 5   4
RR389   2019-01-03 Thu  2019-01 2   7
RR389   2019-01-04 Fri  2019-01 6   9
RR389   2019-01-05 Sat  2019-01 1   9
RR389   2019-01-06 Sun  2019-01 4   8
RR389   2019-01-07 Mon  2019-01 1   7

解决方案

Stata的wofd()默认以周一为每周第一天,但周数计数逻辑导致显示的区间是周二至周一。要实现周一至周日的周划分,可通过日期偏移调整实现:

1. 调整日期:将周日归至前一周

利用dow()函数判断日期是否为周日(返回值为0),若为周日则将日期减1天,让周日纳入前一周的区间:

gen date_adjusted = date
replace date_adjusted = date - 1 if dow(date) == 0

2. 生成周一至周日的周变量

基于调整后的日期生成周变量,此时周数对应的区间就是周一至周日:

gen int week_monsun = wofd(date_adjusted)
format week_monsun %twCCYY-WW
order week_monsun, after(date)

3. 验证逻辑

调整后:

  • 2019年1月6日(周日)调整为1月5日(周六),对应周数仍为2019-01
  • 2019年1月7日(周一)保持原日期,对应周数变为2019-02
    这样就实现了周一至周日的周度区间划分。

完整代码

* 格式化日期显示
format date %tdCCYY-NN-DD_Day

* 调整日期:将周日偏移至前一天,统一周区间为周一至周日
gen date_adjusted = date
replace date_adjusted = date - 1 if dow(date) == 0

* 生成目标周变量并格式化
gen int week_monsun = wofd(date_adjusted)
format week_monsun %twCCYY-WW

* 调整变量顺序
order week_monsun, after(date)

* 可选:删除临时调整变量
drop date_adjusted

聚合为周度观测值

如果需要将日度数据聚合为周度(如求和、均值),可使用collapse命令:

bysort car week_monsun: collapse (sum) milg fuelc, fast

内容的提问来源于stack exchange,提问作者susign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:52:01