如何在Stata中用by:前缀基于组内多观测条件生成变量?
解决Stata按组判断是否存在多类观测的问题
问题根源
你之前的代码逻辑错误:单条观测中Domestic==1和Foreign==1不可能同时成立(一辆车只能是国产或进口),所以无论用generate还是replace,都无法触发条件,导致全缺失或无变化。
正确解法
我们需要判断整个组内是否同时存在国产(foreign=0)和进口(foreign=1)车辆,直接利用原变量foreign即可实现,无需额外生成冗余变量,以下是两种简洁的实现方式:
方法1:通过组内极值判断
sysuse autotype, clear sort rep78 by rep78: generate both_types = (min(foreign) == 0 & max(foreign) == 1)
- 逻辑:如果组内
foreign的最小值为0(存在国产车辆)且最大值为1(存在进口车辆),则both_types赋值为1,否则自动为0。
方法2:统计组内类型数量
sysuse autotype, clear sort rep78 by rep78: egen n_types = nvals(foreign) generate both_types = (n_types == 2) drop n_types
- 逻辑:用
egen nvals()统计组内foreign的不同取值数量,若数量为2则说明两种类型都存在,both_types设为1,否则为0。
结果验证
运行代码后查看分组结果:
- rep78=1组:所有车辆均为国产(foreign=0),
both_types=0 - rep78=5组:同时存在国产和进口车辆,
both_types=1
完全符合你的预期需求。
内容的提问来源于stack exchange,提问作者user21284233
相关产品推荐
相关产品推荐

