如何在sas中将每一行与另一个矩阵的每一行元素相乘?
how to multiply each row with each row of another matrix elementwise in sas?
我有一个行矩阵(向量)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}
谢谢!
在 IML 中使用逐元素乘法运算符,#
:
proc iml;
a = {1 2 3};
b = {2 3 4,
1 5 3,
5 9 10};
c = a#b;
print c;
quit;
当然有一个非 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;
我有一个行矩阵(向量)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}
谢谢!
在 IML 中使用逐元素乘法运算符,#
:
proc iml;
a = {1 2 3};
b = {2 3 4,
1 5 3,
5 9 10};
c = a#b;
print c;
quit;
当然有一个非 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;