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

Stata事件研究:半年度日期与虚拟变量交互循环实现问询

Stata事件研究:半年度日期与虚拟变量交互的正确实现

原代码的问题

  1. Stata foreach循环语法错误,无法直接用yh()序列作为迭代对象
  2. 日期比较可能存在格式不匹配问题,需确保参与比较的日期为数值型半年度格式

正确实现步骤

1. 确保日期变量为数值型半年度格式

如果你的sdate是字符串格式(比如"1933h1"),先转换为数值型:

gen sdate_num = monthly(sdate, "YM")
format sdate_num %th

如果sdate已经是数值型半年度日期,可跳过此步骤。

2. 方式一:用forvalues按日期增量循环

* 定义起止半年度日期的数值型值
local start = yh(1933h1)
local end = yh(1958h2)

* 按每半年6个月的增量循环
forvalues y = `start'(6)`end' {
    * 把数值型日期转为"YYYYhX"格式的字符串
    local yh_label = string(`y', "%th")
    * 生成交互项变量
    gen d_`yh_label' = dummy * (sdate_num == `y')
    * 给变量加标签
    label var d_`yh_label' "`yh_label'"
}

3. 方式二:生成半年度日期列表后循环

* 生成1933h1到1958h2的半年度日期列表
local date_list ""
forvalues year = 1933/1958 {
    local date_list "`date_list' yh(`year'h1) yh(`year'h2)"
}

* 遍历每个日期生成交互项
foreach date of local date_list {
    local yh_label = string(`date', "%th")
    gen d_`yh_label' = dummy * (sdate_num == `date')
    label var d_`yh_label' "`yh_label'"
}

关键说明

  • yh()函数生成的是数值型半年度日期,循环步长设为6对应每半年的间隔
  • string(y', "%th")`用于将数值型日期转换为可读的半年度字符串,保证变量名和标签的可读性
  • 必须确保参与比较的两个日期变量(sdate_num和循环中的y/date)为同一格式的数值型日期,避免比较错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:41:12