2015-12-02 139 views
1

我有以下两个数据集。我怎样才能排除这些观察结果DATA1DATA2在SAS中通过另一个数据集过滤数据集

data DATA1; 
    input Name $ 1-25; 
    datalines; 
Vincent, Martina 
Phillipon, Marie-Odile  
Gunter, Thomas    
Harbinger, Nicholas  
Benito, Gisela    
Rudelich, Herbert   
Sirignano, Emily   
Morrison, Michael   
; 
run; 

data DATA2; 
    input Name $ 1-25; 
    datalines; 
Vincent, Martina 
Morrison, Michael   
; 
run; 
+0

一个非常类似的问题,只是在这里问:https://communities.sas.com/t5/SAS-程序/减法 - 双SAS数据集/ mp/237476 – Reeza

回答

2

典型的例子存在,并经常讨论(这是最有效的)的LEFT JOIN NULL vs. NOT IN vs NOT EXISTS的SQL查询。

考虑PROC SQL相当于解决方案:

proc sql; 
    create table Data3 as 
     select Data1.Name 
      from Data1 
     left join Data2 on Data1.Name = Data2.Name 
      where Data2.Name is null; 
quit; 

proc sql; 
    create table Data4 as 
     select Data1.Name 
      from Data1 
      where Data1.Name 
     not in (select Data2.Name from Data2); 
quit; 

proc sql; 
    create table Data5 as 
     select Data1.Name 
      from Data1 
      where not exists 
     (select Data2.Name from Data2 
      where Data1.Name = Data2.Name); 
quit; 

输出

Name 
Phillipon, Marie-Odile 
Gunter, Thomas 
Harbinger, Nicholas 
Benito, Gisela 
Rudelich, Herbert 
Sirignano, Emily 
+0

为什么只有当(内部)加入时左连接为空? –

+0

OP想排除Data2值。使用内部连接(两个集合匹配),我们无法过滤“where Data2.Name为null”。换句话说,什么都不会被排除。 – Parfait

+0

呃好吧 - 我误解了 - 以为OP是在寻求相反的... –