我用了这样一个macro rank,
%macro decile(dsn,var,decilevar);
/* calculate the cutpoints for the quintiles */
proc univariate noprint data=&dsn;
var &var;
output out=decile pctlpts=10 20 30 40 50 60 70 80 90 pctlpre=pct;
run;
/* write the quintiles to macro variables */
data _null_;
set decile;
call symput('q1',pct10) ;
call symput('q2',pct20) ;
call symput('q3',pct30) ;
call symput('q4',pct40) ;
call symput('q5',pct50) ;
call symput('q6',pct60) ;
call symput('q7',pct70) ;
call symput('q8',pct80) ;
call symput('q9',pct90) ;
run;
/* create the new variable in the main dataset */
data &dsn;
set &dsn;
if &var =. then &decilevar = .;
else if &var le &q1 then &decilevar=0.1;
else if &var le &q2 then &decilevar=0.2;
else if &var le &q3 then &decilevar=0.3;
else if &var le &q4 then &decilevar=0.4;
else if &var le &q5 then &decilevar=0.5;
else if &var le &q6 then &decilevar=0.6;
else if &var le &q7 then &decilevar=0.7;
else if &var le &q8 then &decilevar=0.8;
else if &var le &q9 then &decilevar=0.9;
else &decilevar=1;
run;
%mend decile;
-------------------------------------------------
我感觉最后rank 打分出来应该是小于等于0.5的obs个数,和0.5 到1的样本个数是差不多的。
但是为什么在0.5的两端样本个数差别好大啊。这是为什么呢?一个边是5000左右,一边是15000左右
-----------------------------
对全样本做了个proc means; var rank;发现median也不是5.5. 是不是用proc univariate rank,本身就容易有问题?还是我哪里出了问题?
The MEANS Procedure
Analysis Variable : rank
Mean Median Maximum Minimum Std Dev
----------------------------------------------------------------------------
0.5499870 0.6000000 1.0000000 0.1000000 0.2872285