一般的问题就是说我有两个名为 dataset1和dataset2 的数据集,如果我想将dataset1的行与完整的数据集2进行比较,那么基本上将dataset1的每一行与dataset2进行比较。以下只是两个数据集的示例
dataSet1的
EmployeeID Name Employeer
12345 John Microsoft
1234567 Alice SAS
1234565 Jim IBM
dataSet1的
EmployeeID2 Name DateAbsent
12345 John 25/06/2009
12345 John 26/06/2009
1234567 Alice 27/06/2010
1234567 Alice 30/06/2011
1234567 Alice 2/8/2012
12345 John 28/06/2009
12345 John 25/07/2009
12345 John 25/08/2009
1234565 Jim 26/08/2009
1234565 Jim 27/08/2010
1234565 Jim 28/08/2011
1234565 Jim 29/08/2012
我写了一些编程逻辑,而不是sas代码,这只是我的逻辑
for item in dataset1:
for item2 in dataset2:
if item.EmployeeID=item2.EmployeeID2 and item.Name=item2.Name then output newSet
答案 0 :(得分:1)
这是内部联接。
proc sql noprint;
create table output as
select a.EmployeeId,
a.Name,
a.Employeer,
b.DateAbsent
from dataset1 as a
inner join
dataset2 as b
on a.EmployeeID = b.EmployeeID2
and a.Name = b.name;
quit;
如果您不熟悉语法
,建议您阅读PROC SQL上的SAS documentation答案 1 :(得分:1)
要在数据步骤中执行此操作,需要按要加入(或索引)的变量对数据集进行排序。变量名也需要相同,所以我假设两个变量都是EmployeeID。
/*sort*/
proc sort data=dataset1;
by EmployeeID Name;
run;
proc sort data=dataset2;
by EmployeeID Name;
run;
data output;
merge dataset1 (in=ds1) dataset2 (inds2);
by EmployeeID Name;
if ds1 and ds2;
run;
数据步骤为您完成循环。它需要有序集,因为它只需要1次遍历数据集。 if子句检查以确保从两个数据集中获取值。
答案 2 :(得分:0)
您的目标是比较两个数据集并查看存在差异的位置吗? Proc Compare将为您完成此操作。您可以比较特定列或整个数据集。