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

如何使用任何函数或数组在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

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