将一个数据集的每一行与另一个数据集进行比较

时间:2014-02-16 05:19:00

标签: sas

一般的问题就是说我有两个名为 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

3 个答案:

答案 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将为您完成此操作。您可以比较特定列或整个数据集。