我有两个表格表A和表B.在表格A中有3列和3个观察点,在表格B中我有1个列和3个观察点。所以我想将列的每个值乘以表A的行。 示例
Data A ;
Input a b c;
Datalines;
1 2 3
4 5 6
1 2 6
;
Run;
Data B;
Input a;
Datalines;
7
8
4
;
Run;
所以我想将7 * 1乘以8 * 2然后乘以4 * 3 7 * 4然后8 * 5然后4 * 6等等。如何实现这一点。假设表A中有180列,表B中有180行
答案 0 :(得分:1)
要在DATA Step中执行矩阵产品,您可以使用数组。列向量被加载到临时数组中,以便针对数据集中的每一行应用:
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
。