首页 > 解决方案 > Stata:按组保留第一次观察

问题描述

我有一个如下所示的数据集:

id  firm  earnings    A
1   A      100        0
1   A      200        0
2   B      50         1
2   B      70         1  
3   C      900        0

bys id公司,如果A == 0,我只想保留第一个观察结果,如果A == 1,我想保留所有观察结果。

我试过以下代码:

if A==0{
bys id firm: keep if _n==1
 }

但是,无论 A 值是什么,此代码都会删除所有 _n>1 观察值。

标签: stata

解决方案


if (conditional) {do something}语法用于控制流而不是定义变量。正如您现在所拥有的那样,Stata 仅测试是否A==1在第一行。尝试使用and ( &) or or ( |) 语句添加附加条件。尝试这个:

bys id firm: keep if (_n==1 & A==0) | A==1


推荐阅读