楼主: zhouxianfeng111
3899 4

sas/iml中多维矩阵排序及求各列百分位数 [推广有奖]

  • 0关注
  • 1粉丝

已卖:38份资源

本科生

50%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
799 点
帖子
37
精华
0
在线时间
124 小时
注册时间
2009-6-21
最后登录
2019-5-9

楼主
zhouxianfeng111 发表于 2013-3-15 20:03:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
前面看有人发帖解决了单维矩阵的百分位数算法,现我有一个多维矩阵,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
二维码

扫码加我 拉你入群

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

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

关键词:百分位数 分位数 万分感谢 不知道 矩阵

沙发
bobguy 发表于 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;

藤椅
zhouxianfeng111 发表于 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 秒

板凳
bobguy 发表于 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.

报纸
bobguy 发表于 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;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 00:35