2017-01-21 110 views
0

我有一個變量var,其中有許多缺失值,我想要計算第95百分位數,然後使用此值刪除位於第95百分位之上的觀測值(對於那些觀測值不會遺漏變量)。Stata:egen rowpctile取值範圍而不是單個百分點值

由於存在很多缺失值,我使用egenrowpctile,它應該計算p(#)百分位數,忽略缺失值。當我看P95值,但是,他們是不同的值,而不是一個單一的第95百分位值的範圍,如下圖所示:

. egen p95 = rowpctile(var), p(95) 

. list p95 

    +-----------+ 
    |  p95 | 
    |-----------| 
    1. |   . | 
    2. | 65.71429 | 
    3. | 14.28571 | 
    4. |   . | 
    5. |   . | 
... 

我使用的函數不正確或是否有更好的方式去對這個?

+1

通常有更好的分析數據的方式,而不是拋出最高的5%。 –

+0

同意@NickCox。然而,這是一項任務,所以我必須按照要求去做,不過我打算在更加嚴格的異常點識別方法中加入一些說明。 – kathystehl

回答

2

egen命令的rowpctile函數計算的變量分別對每個觀測列表的值的百分。這裏有一些技巧應該讓你走上正確的道路。

. 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 | 
    +---------------------------+ 
+0

謝謝!我能夠使其適應完美。 – kathystehl