Stata如何通过foreach循环实现每次剔单年回归并存储R2为新列
Stata逐次剔除单年份回归取R²的实现方案
你之前写的代码存在三个问题:
- 循环变量没有实际调用,既没有遍历所有年份,也没有加入剔除样本的判断条件
- 循环中重复生成同名变量
Rsq会触发Stata报错 - 没有实现「每轮剔除当前遍历年份样本」的核心逻辑
需求匹配的可运行代码
如果你需要把每轮剔除对应年份的R²匹配回原数据集(即每一条观测的对应列存储的是剔除该观测所在年份后的回归R²),可以直接用以下代码:
* 提取数据中所有唯一的年份值 levelsof year, local(all_years) * 生成新列存储对应结果 gen r2_exclude_year = . * 遍历每个年份执行回归 foreach yr of local all_years { * 回归时剔除当前遍历年份的所有样本 quietly reg y year if year != `yr' * 把该轮的R²赋值给原数据中属于当前年份的所有观测 replace r2_exclude_year = e(r2) if year == `yr' } * 查找R²最高时对应的被剔除年份 sort year * 去重查看所有年份对应的R² bys year: keep if _n == 1 list year r2_exclude_year * 降序排序直接定位最高R²对应的年份 gsort -r2_exclude_year di "剔除后R²最高的年份为:" year[1] " 对应R²为:" r2_exclude_year[1]
代码说明
levelsof命令会自动提取数据里出现过的所有年份,不需要手动录入,适用所有面板/混合截面数据结构- 通过
if year !=yr'`条件限定回归样本,自动跳过当前遍历的年份 - 结果直接存储为新列,可直接后续筛选、排序操作
内容的提问来源于stack exchange,提问作者User350178
相关产品推荐
相关产品推荐

