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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:03