楼主: 6皮皮9
1438 3

[问答] IML中循环使用矩阵的赋值失败问题 [推广有奖]

  • 3关注
  • 3粉丝

硕士生

71%

还不是VIP/贵宾

-

威望
0
论坛币
2183 个
通用积分
2.8500
学术水平
14 点
热心指数
10 点
信用等级
9 点
经验
754 点
帖子
157
精华
0
在线时间
187 小时
注册时间
2008-12-7
最后登录
2023-12-3

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
向各位大侠求救:
其实我只是想用循环来做筛选A矩阵中每一列大于30的元素的和。

我这样写的时候系统提示错误说是没有给b矩阵赋值,不知道如何修改。
proc iml;
a={1 2 50 60,
        2 50 60 10};
n=0;
do while(n<10);
n=n+1;
k=ncol(a);
do i=1 to k;
b=loc(a[,i]>30);
c=sum(a[b,i]);
print a b c ;
end;
end;
quit;
QQ图片20130910225841.jpg

二维码

扫码加我 拉你入群

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

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

关键词:print while 各位大侠 quit End 如何 元素

QQ图片20130910224213.jpg (16.93 KB)

出错截图

出错截图

沙发
6皮皮9 发表于 2013-9-11 11:49:17 |只看作者 |坛友微信交流群
我自己解决了:
由于在a矩阵的第一列所有的元素都是小于30的,这时候loc(a[,i]>30)无法返回数值。所以就会说b矩阵没有被赋值了
然后我用那个any函数来判断后再做计算便可以解决问题。
proc iml;
a={1 2 50 60,
   2 50 60 10};
n=0;
do while(n<10);
n=n+1;
k=ncol(a);
do i=1 to k;
b=any(a[,i]>30);
if b=1 then do;
d=loc(a[,i]>30);
c=sum(a[d,i]);
end;
else do;
d=loc(a[,i]<30);
c=sum(a[d,i]);
end;
print a b c ;
end;
end;
quit;

使用道具

藤椅
playmore 发表于 2013-9-11 12:27:29 |只看作者 |坛友微信交流群
学习了

另外你这个问题如果不用IML
用SQL的话会很简单
因为你是求列的嘛

如果求行的话,用array也可以
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

板凳
6皮皮9 发表于 2013-9-11 13:24:54 |只看作者 |坛友微信交流群
playmore 发表于 2013-9-11 12:27
学习了

另外你这个问题如果不用IML
恩是的,用SQL的话会很简单。其实这个只是一个程序的开头,后面还要做其他的矩阵计算。
一开头就被卡着的感觉真不爽。主要还是IML用得少,对于它的函数运行结果不是很熟悉导致的。

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-28 15:15