2017-10-14 7 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

あなたは、その後のifまたはwhere状態で使用するマクロ変数に分位数の値を読み取ることができ、次のいずれか(

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; 

か、

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; 

SQLのサブクエリを使用することができますあなたの質問には95番目の分位記号が記載されていますが、サンプルコードには75番目が含まれています)

0

User2877959のソリューションは実用的です。最近、私はこれをProc Rankとしました。この解決策はちょっとした「回避」ですが、多くの入力を省くことができます。ランク上の

proc rank data=Input groups=1000 out=rank_out; 
    var var_to_rank; 
    ranks Rank_val; 
run; 

data seventy_five; 
    set rank_out; 
    if rank_val>750; 
run; 

の詳細:あなたがこれまでに試したものをhttp://documentation.sas.com/?docsetId=proc&docsetTarget=p0le3p5ngj1zlbn1mh3tistq9t76.htm&docsetVersion=9.4&locale=en

関連する問題