比较两个 sas 数据集
Comparing two sas datasets
我有两个 sas 数据集
一个答案数据集
id A1 A2 A3 A4
1 A B C D
2 B B C A
3 A A D D
还有一个关键数据集
A1 A2 A3 A4
A B C D
问题是 SAS 中是否有一种方法可以遍历第一个数据集中的观测值并将它们与第二个数据集中的唯一观测值进行比较。我对 SAS 很陌生,所以任何东西都会有帮助
循环由数据步骤处理 - 它会自动执行。
要将单行附加到另一个数据集中的所有行非常简单:
data want;
if _n_=1 then set have_onerow;
set have;
run;
这仅在变量名称不同的情况下才有效——但这会将 have_onerow 中的行附加到 have 的所有行(因为 SET 中的变量会自动保留)。
这不会为您进行比较 - 您必须这样做。
但是,有一种方法可以使用它来生成 proc compare
数据集。只保留 ID 并执行上述操作:然后每个 ID 重复一次密钥。然后 proc compare
将为您执行此操作 - 查看 the documentation 以获取有关哪些选项为您提供输出数据集中正确信息的更多信息。
data have;
input id A1 $ A2 $ A3 $ A4 $ ;
datalines;
1 A B C D
2 B B C A
3 A A D D
;;;;
run;
data key;
input a1 $ a2 $ a3 $ a4 $;
datalines;
A B C D
;;;;
run;
data key_allrows;
if _n_=1 then set key;
set have (keep=id);
run;
proc compare base=key_allrows compare=have out=compare;
by id;
run;
proc sort data=a; by a1 a2 a3 a4; run;
proc sort data=b; by a1 a2 a3 a4; run;
data c;
merge a(in=ina) b(in=inb)
by a1 a2 a3 a4;
if inb then b='Ý';
run;
它为匹配的一个创建数据集 a,指示符 b='Ý'
我有两个 sas 数据集
一个答案数据集
id A1 A2 A3 A4
1 A B C D
2 B B C A
3 A A D D
还有一个关键数据集
A1 A2 A3 A4
A B C D
问题是 SAS 中是否有一种方法可以遍历第一个数据集中的观测值并将它们与第二个数据集中的唯一观测值进行比较。我对 SAS 很陌生,所以任何东西都会有帮助
循环由数据步骤处理 - 它会自动执行。
要将单行附加到另一个数据集中的所有行非常简单:
data want;
if _n_=1 then set have_onerow;
set have;
run;
这仅在变量名称不同的情况下才有效——但这会将 have_onerow 中的行附加到 have 的所有行(因为 SET 中的变量会自动保留)。
这不会为您进行比较 - 您必须这样做。
但是,有一种方法可以使用它来生成 proc compare
数据集。只保留 ID 并执行上述操作:然后每个 ID 重复一次密钥。然后 proc compare
将为您执行此操作 - 查看 the documentation 以获取有关哪些选项为您提供输出数据集中正确信息的更多信息。
data have;
input id A1 $ A2 $ A3 $ A4 $ ;
datalines;
1 A B C D
2 B B C A
3 A A D D
;;;;
run;
data key;
input a1 $ a2 $ a3 $ a4 $;
datalines;
A B C D
;;;;
run;
data key_allrows;
if _n_=1 then set key;
set have (keep=id);
run;
proc compare base=key_allrows compare=have out=compare;
by id;
run;
proc sort data=a; by a1 a2 a3 a4; run;
proc sort data=b; by a1 a2 a3 a4; run;
data c;
merge a(in=ina) b(in=inb)
by a1 a2 a3 a4;
if inb then b='Ý';
run;
它为匹配的一个创建数据集 a,指示符 b='Ý'