楼主: 子衿1219
2587 9

[原创博文] 关于array的求助 [推广有奖]

  • 1关注
  • 4粉丝

讲师

70%

还不是VIP/贵宾

-

威望
0
论坛币
60 个
通用积分
1.0023
学术水平
2 点
热心指数
0 点
信用等级
1 点
经验
13521 点
帖子
326
精华
0
在线时间
431 小时
注册时间
2012-3-19
最后登录
2018-7-8

楼主
子衿1219 发表于 2012-5-30 11:55:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我想问问各位sas前辈们。
我要对以下数据集做行,列的平均值,用array的二维数组做。
4564 93 97 96 89 92
8788 75 78 79 72 85
4458 64 67 75 72 76
3120 56 66 71 64 73
2525 92 99 98 98 97
3566 66 76 82 78 92
1980 78 75 79 64 81

我写的程序如下:
data two;
infile'E:\sas\in class 3\class.txt' ;
input @6  a1-a5/  @6 b1-b5/  @6 c1-c5 / @6 d1-d5/
@6 e1-e5/  @6 f1-f5/ @6 g1-g5 ;
array ave{7,5}a1-a5 b1-b5 c1-c5 d1-d5 e1-e5 f1-f5 g1-g5;
array row{7} h1-h7;
array column{5} l1-l5;
do i=1 to 5;
row{i}=(ave{i,1}+ave{i,2}+ave{i,3}+ave{i,4}+ave{i,5})/5;
row{i}=round(row{i},.1);
end;
do j=1 to 7;
column{j}=(ave{1,j}+ave{2,j}+ave{3,j}+ave{4,j}+ave{5,j}+ave{6,j}+ave{7,j})/7;
column{j}=round(column{j},.1);
end;
keep h1-h7 l1-l5;run;
proc print;run;

但是log里面就一直报错
ERROR: Array subscript out of range at line 590 column 21.

我想问下如何修改。谢谢大家。
二维码

扫码加我 拉你入群

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

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

关键词:array ARR Ray column script 平均值 程序

回帖推荐

bobguy 发表于6楼  查看完整内容

I do it in a simple logic here. data two; array a(*) a1-a6; array s(*) s1-s6; retain num2; keep row_col num mean; infile cards eof=eof; input a1 - a6; row_col='ROW'; num+1; s1+a1;s2+a2;s3+a3;s4+a4;s5+a5;s6+a6; mean=mean( of a[*]); num2=num; output; return; eof: do num=1 to dim(a); row_col='COL'; mean=s[num]/num2; output; end; cards; 4564 9 ...

本帖被以下文库推荐

沙发
jingju11 发表于 2012-5-30 12:06:16
i =7,j =5不过array不应该这么用。京剧

藤椅
子衿1219 发表于 2012-5-30 14:33:03
jingju11 发表于 2012-5-30 12:06
i =7,j =5不过array不应该这么用。京剧
谢谢,经调整后,无误。非常感谢。能顺便说下,array为什么不能这样用吗?

板凳
zhangzachary 发表于 2012-5-30 14:44:54
你要把SAS Base当成R,Matlab用,复杂点就会很痛苦……而且那两种软件都有更简单的方法计算。
如果要用SAS做矩阵计算,建议学习IML。
如果只是为了计算基本的统计量,建议学习Base+STAT。
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

报纸
子衿1219 发表于 2012-5-30 15:18:11
zhangzachary 发表于 2012-5-30 14:44
你要把SAS Base当成R,Matlab用,复杂点就会很痛苦……而且那两种软件都有更简单的方法计算。
如果要用SAS做 ...
恩恩。谢谢给予中肯意见。我是刚刚迈入sas起步阶段。然后老师专门要练习array的用法。
再次感谢哈。

地板
bobguy 发表于 2012-6-1 07:37:26
I do it in a simple logic here.




data two;
array a(*) a1-a6;
array s(*) s1-s6;
retain num2;
keep row_col num mean;
infile cards eof=eof;
input a1 - a6;
row_col='ROW';
num+1;
s1+a1;s2+a2;s3+a3;s4+a4;s5+a5;s6+a6;
mean=mean( of a[*]);
num2=num;
output;

return;
eof:

  do num=1 to dim(a);
     row_col='COL';
     mean=s[num]/num2;
         output;
  end;

     
cards;
4564 93 97 96 89 92
8788 75 78 79 72 85
4458 64 67 75 72 76
3120 56 66 71 64 73
2525 92 99 98 98 97
3566 66 76 82 78 92
1980 78 75 79 64 81
;

proc print;run;
  
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

7
astrozscore 发表于 2012-6-1 09:26:58
好复杂的code,还没搞清楚到底要干什么。

8
子衿1219 发表于 2012-6-1 09:50:42
bobguy 发表于 2012-6-1 07:37
I do it in a simple logic here.
非常感谢。

9
hcydlee 发表于 2012-6-1 10:37:46
bobguy 发表于 2012-6-1 07:37
I do it in a simple logic here.
很简洁阿
80 字节以内
不支持自定义 Discuz! 代码

10
yongjiang2 发表于 2012-6-28 11:04:06
学习···············

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 14:56