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

如何在Stata中为FOMC利率变动公告计算S&P500收益的事件窗口

解决Stata事件研究中事件窗口赋值问题

方法一:基于行号的循环赋值(适用于交易日连续排序的数据集)

这种方法直接匹配你描述的需求,针对事件所在行,给其前后2行分别赋值对应的窗口值:

* 核心前提:确保数据按交易日日期排序
sort date

* 生成空的事件窗口变量,初始为缺失值
gen event_window = .

* 提取所有事件发生的行号,存入本地宏
levelsof _n if announcementdays == 1, local(event_rows)

* 遍历每个事件行,给对应窗口范围赋值
foreach row of local event_rows {
    replace event_window = -2 if _n == `row' - 2
    replace event_window = -1 if _n == `row' - 1
    replace event_window = 0  if _n == `row'
    replace event_window = 1  if _n == `row' + 1
    replace event_window = 2  if _n == `row' + 2
}

说明:

  • 若数据集开头的事件没有前2行(比如第一个事件是第3行),_n == row-2不成立,对应位置会保持缺失值,符合逻辑(无对应前置窗口)。
  • 同理,数据集末尾的事件没有后2行时,后置窗口位置也会保持缺失。
  • 可通过list date announcementdays event_window in 10/20(替换行号范围)检查赋值是否正确。

方法二:基于日期差值的赋值(适用于按日历日计算窗口或存在交易日缺失的情况)

如果窗口按日历日定义,或数据因节假日存在交易日不连续的情况,可用日期差值计算:

* 确保日期为Stata数值型日期(如%td格式,存储为从1960年1月1日起的天数)
sort date

* 提取所有事件日期,存入本地宏
levelsof date if announcementdays == 1, local(event_dates)

* 生成事件窗口变量
gen event_window = .

foreach d of local event_dates {
    * 仅对与事件日差值在-2到2之间的日期赋值
    replace event_window = date - `d' if inrange(date - `d', -2, 2)
}

说明:

  • 若需要排除非交易日(如周末),可提前执行drop if inlist(weekday(date), 1,7)清理数据,再运行上述代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:32:44