如何使用任何函数或数组在sas中执行矩阵
我有两个表A和表B。表A中有3列和3个观察值,表B中有1列和3个观察值。所以我想将列的每个值乘以表A的行。 范例 所以我想乘以7*1,然后乘以8*2,然后乘以4*3如何使用任何函数或数组在sas中执行矩阵,sas,Sas,我有两个表A和表B。表A中有3列和3个观察值,表B中有1列和3个观察值。所以我想将列的每个值乘以表A的行。 范例 所以我想乘以7*1,然后乘以8*2,然后乘以4*3 7*4、8*5、4*6等等。如何实现。假设表A中有180列,表B中有180行,要在数据步骤中执行矩阵积,可以使用数组。将列向量加载到临时数组中,以便针对数据集中的每一行应用: data product (keep=a_prod_b); array vector(3) _temporary_; if _n_ = 1 then
7*4、8*5、4*6等等。如何实现。假设表A中有180列,表B中有180行,要在数据步骤中执行矩阵积,可以使用数组。将列向量加载到临时数组中,以便针对数据集中的每一行应用:
data product (keep=a_prod_b);
array vector(3) _temporary_;
if _n_ = 1 then do;
do _index = 1 to dim(vector);
set b;
vector(_index) = a;
end;
end;
set a;
array row a b c; * replace with v1-v180 or the 180 column names;
a_prod_b = 0;
do _index = 1 to dim (row);
a_prod_b + row(_index) * vector(_index);
end;
run;
部分积
data partials;
array vector(3) _temporary_;
if _n_ = 1 then do;
do _index = 1 to dim(vector);
set b;
vector(_index) = a;
end;
end;
set a;
array row a b c;
do _index = 1 to dim (row);
row(_index) = row(_index) * vector(_index);
end;
drop _index;
run;
对于180列的情况,我假设列名被编入索引,例如
v1
到v180
您想要什么?是否希望A的第一行生成类似于7,16,12的行?还是像7+16+12这样的单个值?您有SAS/IML许可证吗?
data partials;
array vector(3) _temporary_;
if _n_ = 1 then do;
do _index = 1 to dim(vector);
set b;
vector(_index) = a;
end;
end;
set a;
array row a b c;
do _index = 1 to dim (row);
row(_index) = row(_index) * vector(_index);
end;
drop _index;
run;