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

时间:2017-12-29 17:07:42

标签: sas

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

1 个答案:

答案 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列的情况,我会假设列名被编入索引,例如v1v180