Stata中如何识别并删除不符合观测条件的整个set分组?
在Stata中按组筛选并移除不符合条件的观测
要实现你要求的——保留每个set分组中恰好包含1个Var2=1和2个Var2=0的观测,不符合条件的整个组全部删除——可以通过以下几步轻松完成:
步骤1:计算每组中Var2=1和Var2=0的观测数
先按set分组,用egen命令生成两个临时变量,分别统计每组里Var2等于1和0的数量:
bysort set: egen count1 = total(Var2 == 1) bysort set: egen count0 = total(Var2 == 0)
bysort set:告诉Stata按set变量分组处理数据total(Var2 == 1):统计组内满足Var2=1的观测个数,结果存入count1- 同理,
count0统计组内Var2=0的观测个数(缺失值不会被计入统计)
步骤2:移除不符合条件的组
筛选出同时满足count1=1且count0=2的观测,删除所有不满足该条件的行(这样整个不符合要求的set组就会被全部移除):
drop if count1 != 1 | count0 != 2
步骤3:清理临时变量
完成筛选后,可以删掉刚才生成的临时统计变量,保持数据整洁:
drop count1 count0
验证效果
用你提供的示例数据测试的话:
set=1:count1=1,count0=2,符合条件,保留所有3条观测set=2:count1=2、count0=1,不符合规则,会被全部删除set=3:count1=1,count0=2,符合条件,保留set=4:count1=0,count0=2(最后一条Var2缺失,不被计入0),不符合规则,会被全部删除
这样就完美实现了你要的需求~
内容的提问来源于stack exchange,提问作者Student




