仅保留变量 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
我有一个类似于以下的 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