仅保留变量 Stata 的最频繁值

Keeping only most frequent values of a variable Stata

我有一个类似于以下的 long 数据集:

|patient_id |group_number|
|------------------------|
|1          |3           |
|1          |5           |
|2          |5           |
|2          |4           |
|3          |3           |

假设有更多的观察结果,以及更多的唯一组编号。我正在尝试删除 group_number 在数据集中出现次数少于 50 次的所有观察结果。我觉得这将涉及创建出现次数超过 50 次的 group_number 的列表(可能在 numlist 中),然后如果 group_number 不在 numlist 中则删除该行。但是,我的问题是创建此 numlist。

到目前为止,我已尝试使用 tab 获取排序频率列表,然后使用这些值:

tab group_number, sort matcell(x) 
svmat x
list x if x > 50 & x != .

这为我提供了出现次数超过 50 次的值的频率列表。但是,它使我无法理解如何将此列表转换为删除行。我走在正确的轨道上,还是有更好的方法?

我当然可以用

drop if group_number == 3 | if group_number == 4 | if group_number == 5

但继续列出所有出现次数 < 50 的组号。不幸的是,这对于我的数据集的大小来说不太可行。

下面的代码删除了少于 2 个观察值的组的所有观察值。

clear
input pid grp
1          3 
1          5 
2          5 
2          4 
3          3 
end
bysort grp: drop if _N<2
list, clean noobs