2015-12-02 2 views
1

У меня есть следующие два набора данных. Как можно исключить эти наблюдения в DATA1, которые существуют в DATA2Фильтрация набора данных другим набором данных в 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- Процедуры/Subtracting-two-SAS-data-sets/mp/237476 – Reeza

ответ

2

Классический пример и часто обсуждается (что наиболее эффективно) SQL запрос к LEFT JOIN NULL vs. NOT IN vs NOT EXISTS.

Рассмотрим прок 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

Почему осталось объединение null, когда вы могли просто (внутри) присоединиться? –

+0

OP хотел исключить значения Data2. С внутренним соединением (оба соответствия наборов) мы не могли бы фильтровать для 'where Data2.Name null '. Другими словами, ничего не исключено. – Parfait

+0

Ahh ok - я неправильно понял - думал OP просил об обратном ... –

Смежные вопросы