我有2个数据库:
我需要将数据库1的每一行乘以数据库2的所有行(即数据库1的所有行的数据库1的第1行;数据库2的所有行的数据库1的第2行等),这样一来:
我需要为每个id中的每个阶段获取一个值 你能帮我解决这个问题吗?我使用SAS软件。
答案 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;