如何使用任何函数或数组在sas中执行矩阵

问题描述 投票:-1回答:1

我有两个表格表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行

sas
1个回答
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列的情况,我会假设列名称被索引,例如v1v180

© www.soinside.com 2019 - 2024. All rights reserved.