2017-10-14 106 views
0

在下面的代碼中,我如何只保留高於第95個分位數的觀察值?如何根據分位數過濾數據集

data test; 
input business_ID $ count; 
datalines; 
'busi1' 2 
'busi1' 10 
'busi1' 4 
'busi2' 1 
'busi3' 2 
'busi3' 1 
; 
run; 

proc sort data = test; 
    by descending count; 
run; 

我不知道如何幹淨地股票的四分位,然後用if條件重新使用它。

感謝

編輯:我能確定此代碼的位數:

proc means data=test noprint; 
var count; 
output out=quantile P75=/autoname; 
run; 

但我怎麼能與它在Test數據集,這樣我可以選擇位數以上的每一個意見?

+0

後你試過到目前爲止。您可以使用PROC MEANS,UNIVARIATE或RANK來查找百分位數。 – Reeza

回答

0

您既可以在宏變量讀取位數的值在隨後的ifwhere條件使用:

proc means data=test noprint; 
var count; 
output out=quantile P75=/autoname; 
run; 

data _null_; 
set quantile; 
call symput('quantile',count_p75); 
run; 

data test; 
set test; 
where count > &quantile.; 
run; 

,或者你可以使用一個SQL子查詢

proc means data=test noprint; 
var count; 
output out=quantile P75=/autoname; 
run; 

proc sql undo_policy=none; 
create table test as 
select * 
from test 
where count > (select count_p75 from quantile) 
; 
quit; 

(請注意,您的問題提到了第95個分位數,而您的示例代碼提到了第75個分位數)