bobguy 发表于 2013-3-17 09:51 
The call qntl is a new routine in SAS 9.3.
You can write you own sample quantile function.
proc iml;
start MY_Qntl_fun(x, p);
n = nrow(x);
q = j(1,ncol(x),0);
do j = 1 to ncol(x);
y = x[,j];
call sort(y);
k0 = n*p;
k1 = int(k0);
k2 = k1 + 1;
if k0 - k1>0 then
q[1,j] = y[k2];
else
q[1,j] = (y[k1]+y[k2])/2;
end;
return(q);
finish;
a={
90 62 66 68 70 72 73 74 78 78,
78 79 80 81 82 82 82 84 84 85,
85 85 85 87 88 89 89 89 89 61,
81 88 85 89 78 90 91 97 82 85,
92 88 84 93 89 95 91 78 77 96
};
call qntl(qntl_a, a, 0.9);
print 'return from call routine' qntl_a;
p = {0.9 };
q=MY_Qntl_fun(a, p);
print 'return from user defined function' q;
****use rannor number;
quantile_value_95pct=quantile('normal',0.95);
print 'The quantile value 95%=' quantile_value_95pct;
call randseed(12345);
a=j(10000,10,.);
call randgen(a, 'NORMAL') ;
call qntl(qntl_a, a, 0.95);
print 'return from call routine' qntl_a;
p = {0.95 };
q=MY_Qntl_fun(a, p);
print 'return from user defined function' q;
quit;