标题: 如何求百分位 [打印本页] 作者: shiyiming 时间: 2010-9-15 18:56 标题: 如何求百分位 有个数据集有个5个变量a b c d e f,我想求出五个变量都拍在所在列前30%的观测值,请问有什么方法可以快速实现呢,谢谢。作者: shiyiming 时间: 2010-9-16 05:26 标题: Re: 如何求百分位 [code:2e4p1ytq]proc rank data = have out = rank_out groups = 100;
var a b c d e f;
ranks rank_a rank_b rank_c rank_d rank_e rank_f;
run;
data final;
set rank_out;
if max(of rank_:) < 30;
run;[/code:2e4p1ytq]
对排行的定义受对ties 如何处理的影响。对百分位的定义当然和proc univariate的定义也不同,虽然本质上差异不大。假定你的列前是从小往大数。作者: shiyiming 时间: 2010-9-16 09:25 标题: Re: 如何求百分位 函数PCTL也可以。
proc univariate也不错。
ps:jingju测试过么?作者: shiyiming 时间: 2010-9-16 12:07 标题: Re: 如何求百分位 我的理解是:pctl() 和univarite有同样的对percentile定义。rank此处在本质上有标定顺序的感觉。如果说univariate的percentile可以不是数列中的某个数,而在rank里是不可能造数的。他的问题应该不会是需要对百分数的精确定义的。
话说回来,univariate里的定义应该就是sas在统计角度上对percentile的定义。所以你的建议是属于精益求精一类的。作者: shiyiming 时间: 2010-9-16 22:23 标题: Re: 如何求百分位 你给的方法已经很方便了。作者: shiyiming 时间: 2010-9-17 07:08 标题: Re: 如何求百分位 to jingju11
I usually do this:
******************************************;
data _null_;
set original nobs=ntotal;
setn=int(ntotal*0.3);
call symput('nextr', setn);
run;