我无法对多维数组的子集中的所有值进行求和??
_sum = sum(_valores [_ i,_x,_quadrado,*]);
我知道我可以对一维数组求和 E.G。 _sum = sum(_arraName [*]);
代码::
data teste;
array _quadros{3,3,9} _temporary_;
array _valores{3,3,9,9} _temporary_;
/*Zera todos os valores*/
do _i = 1 to 9;
do _z = 1 to 3;
do _t = 1 to 3;
do _x = 1 to 9;
_valores[_z,_t,_i,_x] = 1;
end;
end;
end;
end;
do _quadrado = 1 to 9;
do _i = 1 to 3;
do _x = 1 to 3;
_sum = sum(of _valores[_i,_x,_quadrado,*]);
put _sum =;
end;
end;
end;
run;
错误::
_sum = sum(_valores [_ i,_x,_quadrado,*]);
ERROR 386-185:期待算术表达式。
ERROR 200-322:符号无法识别,将被忽略。
ERROR 76-322:语法错误,语句将被忽略。
答案 0 :(得分:2)
我不认为你可以用sum函数来做。你可以自己编写它。
proc fcmp outlib=work.fns.fns;
function sumslice4(inArr[*,*,*,*],a,b,c,d) ;
_1 = dim(inArr,1);
_2 = dim(inArr,2);
_3 = dim(inArr,3);
_4 = dim(inArr,4);
_s = 0;
do i=1 to _1;
do j=1 to _2;
do k=1 to _3;
do l=1 to _4;
if (a = i or missing(a)) and
(b = j or missing(b)) and
(c = k or missing(c)) and
(d = l or missing(d)) then
_s = sum(_s,inArr[i,j,k,l]) ;
end;
end;
end;
end;
return (_s);
endsub;
run;
quit;
这会创建一个函数sumslice4()
,它采用4维数组和一系列索引。您指定要求求和的索引。 (可选)设置缺少的.
以指定完整索引。
以下是您的示例测试:
options cmplib=work.fns;
data test;
array _values{3,3,9,9} _temporary_;
do _i = 1 to 9;
do _z = 1 to 3;
do _t = 1 to 3;
do _x = 1 to 9;
_values[_z,_t,_i,_x] = 1;
end;
end;
end;
end;
x = sumslice4(_values,1,1,.,.);
put x=;
x = sumslice4(_values,1,1,1,.);
put x=;
x = sumslice4(_values,1,1,1,1);
put x=;
x = sumslice4(_values,.,1,1,1);
put x=;
run;
我明白了:
x=81
x=9
x=1
x=3
这应该是你所期待的。
答案 1 :(得分:1)
标准化您的数据并使用PROC SUMMARY
。
* generate test data ;
data test;
do i = 1 to 9;
do z = 1 to 3;
do t = 1 to 3;
do x = 1 to 9;
valores = 1;
output;
end;
end;
end;
end;
run;
* Sum across last dimension ;
proc summary data=test nway ;
class i z t ;
var valores ;
output out=want sum= ;
run;