2

我有一个行矩阵(向量)A和另一个方阵B。如何使用proc iml或其他方式将矩阵B的每一行与SAS中的行矩阵A相乘?

比方说

a = {1 2 3}
b =
{2 3 4
1 5 3
5 9 10}

我的输出 c 将是:

{2 6 12
1 10 9
5 18 30}

谢谢!

4

2 回答 2

3

#在 IML 中使用元素乘法运算符:

proc iml;
a = {1 2 3};
b = {2 3 4, 
     1 5 3,
     5 9 10};

c = a#b;
print c;
quit;
于 2017-12-18T14:39:26.297 回答
0

当然,有一个非 IML 解决方案,或者 20 个,尽管 Dom 指出的 IML 可能是最简单的。这里有两个。

首先,将它们放到一个数据集上,该a数据集位于每一行(带有一些其他变量名称) - 见下文。然后,要么只做数学运算(使用数组),要么使用PROC MEANS或类似的方法将a数据集用作权重。

data a;
  input w_x w_y w_z;
  datalines;
1 2 3
;;;;
run;

data b;
  input x y z;
  id=_n_;
  datalines;
2 3 4
1 5 3
5 9 10
;;;;
run;

data b_a;
  if _n_=1 then set a;
  set b;
  *you could just multiply things here if you wanted;
run;


proc means data=b_a;
class id;
types id;
var x/weight=w_x;
var y/weight=w_y;
var z/weight=w_z;
output out=want sum=;
run;
于 2017-12-18T19:26:56.527 回答