使用SAS

时间:2018-01-05 19:14:39

标签: sas multiplication

我有2个数据库:

数据库1

Database 1

数据库2

Database 2

我需要将数据库1的每一行乘以数据库2的所有行(即数据库1的所有行的数据库1的第1行;数据库2的所有行的数据库1的第2行等),这样一来:

示例等式

![Example equations ] 3

我需要为每个id中的每个阶段获取一个值 你能帮我解决这个问题吗?我使用SAS软件。

1 个答案:

答案 0 :(得分:2)

我不打算从你的照片中重新输入所有数据,但这是一个适用于你的两个阶段"的程序。因此,我调用HAVE的第一个数据集和我调用STAGES的第二个数据集,此数据步骤将生成一个WANT数据集,该数据集保留HAVE中的所有数据并添加新计算的变量。

data want ;
  set have ;
  array vars x y z ;
  array stages a b ;
  do p=1 to dim(stages);
    set stages point=p ;
    array factor m1-m3 ;
    stages(p)=0;
    do j=1 to dim(vars);
      stages(p) + vars(j)*factor(j) ;
    end;
  end;
  drop stage m1-m3 j;
run;

所以这是两行输入数据和两个新阶段的结果。

Obs    id     x      y      z       a       b
 1      1    0.5    0.5    0.3    1.40    1.12
 2      2    0.3    0.1    0.1    0.48    0.34

要将此扩展为更灵活,可以使用宏变量在ARRAY语句中指定变量名称列表。您甚至可以通过使用PROC SQL和INTO子句从STAGES数据集中的STAGE列中提取名称来生成用于STAGES数组的名称列表。

您也可以在data_null_(https://communities.sas.com/t5/SAS-Procedures/Multiplication-of-tables-in-SAS/m-p/125059#M34355)中关注如何使用PROC SCORE乘以矩阵的示例。设置STAGES数据集以使其具有与输入数据集相同的变量名称,并包含_TYPE__NAME_变量。

data stages ;
  _TYPE_='SCORE';
  input _NAME_ :$32. x y z ;
cards;
a 0.7 1.2 1.5
b 0.3 1.1 1.4
;

然后你可以用它来评分"你的源数据。

proc score score=stages data=have out=want;
  var x y z ;
run;