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

Stata执行didregress双重差分报invalid group specification错误

Stata didregress 报r(198)无有效对照组解决方法

报错复现

运行如下DID估计命令时:
didregress (Proposals) (post), group(treated) time(Week)
Stata返回报错信息:

invalid group specification
None of the groups defined by treated is a control.
r(198);

核心报错逻辑

didregress识别对照组的硬规则是:group()传入的分组变量,必须存在至少一批观测主体,在所有时间周期内分组变量取值恒为0,这类主体才会被判定为对照组。只要不满足这个规则,不管怎么调整其他参数都会触发这个报错。

逐场景排查方案

  • 排查1:分组变量不是个体层面恒定值
    这是90%以上该报错的诱因。group()要求传入的是不随时间变化的个体层面分组标识:同一个观测主体(比如样本里的企业、用户、试点单元)在所有Week的观测行里,treated取值必须固定不变——全程取0的是对照组,全程取1的是处理组。
    如果是逐行生成当期处理状态,导致同一个主体有的周treated=0、有的周treated=1,Stata就找不到全程未受干预的对照组,直接报错。
    排查和修复代码:
    * 先替换成你自己的个体ID变量名,比如id、firm_id
    bysort 你的个体ID变量: egen treated_check = sd(treated)
    tab treated_check
    * 如果输出结果里有不为0的值,说明同个体treated取值波动,重新生成分组变量
    bysort 你的个体ID: egen treat_group = max(treated)
    * 用新生成的treat_group替换原命令里的treated即可
    didregress (Proposals) (post), group(treat_group) time(Week)
    
  • 排查2:treated变量取值/类型不符合要求
    不要默认自己生成的treated就是合规0-1虚拟变量,先跑命令核对取值:
    tab treated, missing
    重点核对三类问题:
    • 0值实际是字符串格式、或者被误设为缺失值,Stata识别不到数值0的对照组
    • 实际样本里treated=0的观测数为0,全样本都是处理组
    • 分组用的是1/2两类值区分组,没有0值,Stata不会自动把1识别为对照组,需要重新编码:recode treated (2=0), gen(treated_fix)再传入
  • 排查3:多期交错DID语法用错
    如果做的是处理时点不一致的多期DID,不需要手动生成post和时变的treated变量,手动构造很容易出现没有恒0对照组的问题。多期DID的正确语法是直接传入个体首次被处理的期数变量,格式为:
    didregress (Proposals) (首次处理期变量), group(个体ID) time(Week)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:36:33