使用SAS将文件的每一行乘以另一个文件的所有行
Multiply each line of a file by all lines of another file using SAS
我有 2 个数据库:
数据库 1
数据库 2
我需要将数据库 1 的每一行乘以数据库 2 的所有行(即数据库 1 的第 1 行乘以数据库 2 的所有行;数据库 1 的第 2 行乘以数据库 2 的所有行,等等) , 这样:
示例方程
我需要为每个 ID 中的每个阶段获取一个值。
你能帮我解决这个问题吗?我用SAS软件。
我不会重新输入您图片中的所有数据,但这里有一个程序适用于您的两个 "stages"。因此,我调用的第一个数据集 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_ :. x y z ;
cards;
a 0.7 1.2 1.5
b 0.3 1.1 1.4
;
然后您可以将它用于 "score" 您的源数据。
proc score score=stages data=have out=want;
var x y z ;
run;
我有 2 个数据库:
数据库 1
数据库 2
我需要将数据库 1 的每一行乘以数据库 2 的所有行(即数据库 1 的第 1 行乘以数据库 2 的所有行;数据库 1 的第 2 行乘以数据库 2 的所有行,等等) , 这样:
示例方程
我需要为每个 ID 中的每个阶段获取一个值。
你能帮我解决这个问题吗?我用SAS软件。
我不会重新输入您图片中的所有数据,但这里有一个程序适用于您的两个 "stages"。因此,我调用的第一个数据集 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_ :. x y z ;
cards;
a 0.7 1.2 1.5
b 0.3 1.1 1.4
;
然后您可以将它用于 "score" 您的源数据。
proc score score=stages data=have out=want;
var x y z ;
run;