我有一个变量var
,其中有许多缺失值,我想要计算第95个百分位,然后使用此值来删除高于第95个百分位数的观察值(对于那些没有遗漏变量的观察值)。
由于缺少很多值,我使用egen
和rowpctile
来计算p(#)
百分位,忽略缺失值。但是,当我查看p95值时,它们是一系列不同的值,而不是单个第95百分位值,如下所示:
. egen p95 = rowpctile(var), p(95)
. list p95
+-----------+
| p95 |
|-----------|
1. | . |
2. | 65.71429 |
3. | 14.28571 |
4. | . |
5. | . |
...
我是否错误地使用了该功能,还是有更好的方法来解决这个问题?
答案 0 :(得分:2)
rowpctile
命令的egen
函数为每个观察分别计算变量列表值的百分位数。这里有一些技巧可以让你走上正确的道路。
. sysuse auto, clear
(1978 Automobile Data)
. replace price = . in 1/5
(5 real changes made, 5 to missing)
. summarize price, detail
Price
-------------------------------------------------------------
Percentiles Smallest
1% 3291 3291
5% 3748 3299
10% 3895 3667 Obs 69
25% 4296 3748 Sum of Wgt. 69
50% 5104 Mean 6245.493
Largest Std. Dev. 3015.072
75% 6342 13466
90% 11497 13594 Variance 9090661
95% 13466 14500 Skewness 1.594391
99% 15906 15906 Kurtosis 4.555704
. display r(p95)
13466
. generate toobig = price>r(p95)
. list make price if toobig | price==.
+---------------------------+
| make price |
|---------------------------|
1. | AMC Concord . |
2. | AMC Pacer . |
3. | AMC Spirit . |
4. | Buick Century . |
5. | Buick Electra . |
|---------------------------|
12. | Cad. Eldorado 14,500 |
13. | Cad. Seville 15,906 |
27. | Linc. Mark V 13,594 |
+---------------------------+