Stata:按组保留第一个观察值

Stata: Keep the first observation by group

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

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 firm,如果 A==0,我只想保留第一个观察结果,如果 A==1,我想保留所有观察结果。

我试过以下代码:

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

但是,无论 A 值是多少,此代码都会丢弃所有 _n>1 个观测值。

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

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