Stata事件研究:半年度日期与虚拟变量交互循环实现问询
Stata事件研究:半年度日期与虚拟变量交互的正确实现
原代码的问题
- Stata
foreach循环语法错误,无法直接用yh()序列作为迭代对象 - 日期比较可能存在格式不匹配问题,需确保参与比较的日期为数值型半年度格式
正确实现步骤
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
相关产品推荐
相关产品推荐

