全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3855 4
2013-03-15
前面看有人发帖解决了单维矩阵的百分位数算法,现我有一个多维矩阵,5行10列,如下所示。我想计算每一列的90%位数,不知道哪位高手可以解答一下呢?万分感谢呢!!!!

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
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-3-16 06:38:58
As showed below,

proc iml;
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 qntl_a;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-3-16 23:16:24
bobguy 发表于 2013-3-16 06:38
As showed below,

proc iml;
你好,非常感谢,我刚在sas中试了一下,log显示如下。不知是不是因为版本的问题还是其他问题呢我用的是9.1.3版本。求解答,万分感谢!
250  proc iml;
NOTE: IML Ready
251  a={
252  90 62 66 68 70 72 73 74 78 78,
253  78 79 80 81 82 82 82 84 84 85,
254  85 85 85 87 88 89 89 89 89 61,
255  81 88 85 89 78 90 91 97 82 85,
256  92 88 84 93 89 95 91 78 77 96
257  };
258  call qntl(qntl_a, a, 0.9);
ERROR: Invocation of unresolved module QNTL.

statement : CALL at line 258 column 1
259  print qntl_a;
ERROR: Matrix QNTL_A has not been set to a value.

statement : PRINT at line 259 column 1
260  quit;
NOTE: Exiting IML.
NOTE: SAS 系统由于错误而停止了该步的处理。
NOTE: “PROCEDURE IML”所用时间(总处理时间):
      实际时间         0.03 秒
      CPU 时间         0.01 秒
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-3-17 09:51:07
zhouxianfeng111 发表于 2013-3-16 23:16
你好,非常感谢,我刚在sas中试了一下,log显示如下。不知是不是因为版本的问题还是其他问题呢我用的是9. ...
The call qntl is a new routine in SAS 9.3.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-3-17 23:47:37
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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群