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
相关产品推荐
相关产品推荐

