在下面的代码中,我怎么能只保留观察结果优于第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 :(得分: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;
或者您可以使用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个分位数)
答案 1 :(得分: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;