Как я могу использовать Proc SQL, чтобы найти все записи, которые существуют только в одной таблице, но не в другой? - PullRequest
5 голосов
/ 20 января 2012

Я пытаюсь сделать это в Enterprise Guide, с задачей, иначе я бы просто использовал шаг данных.

На шаге данных это будет:

data names;
 input name $;
 datalines;
  John
  Mary
  Sally
  Fred
  Paul
 ;
run;

data check;
 input name $;
 datalines;
  Mary
  Fred
 ;

Proc sort data=names; by name; run;
Proc sort data=check; by name; run;

Data work.not_in_check;
 merge names(in=n) check(in=c);
 by name;
 if n and not c;
run;

Ответы [ 4 ]

9 голосов
/ 20 января 2012

Вот один из способов.Конечно, есть много других.

proc sql;
 create table not_in_check as
 select name
 from names
 where name not in (select name from check);
quit;
7 голосов
/ 23 января 2012

Еще одно небольшое изменение:

proc sql;
create table not_in_check as select 
 a.* from names as a left join 
          check as b on
          a.name=b.name
          where b.name is null;
quit;
1 голос
/ 07 мая 2014

Следующий метод - довольно простой способ получить записи в одной таблице, а не в другой.

Создана новая таблица с записями, содержащими sex = M, результатом после запроса будут записи с sex = F.

Пример:

data new;
set sashelp.class;
where sex = 'M';
run;
proc sql;
create table new1 as
select * from sashelp.class
except all 
select * from new;
quit;

Поставим кодчтобы проверить мои фактические наборы данных, которые имеют около 100 тыс. объектов и обновить результат.

PS: Я знаю, что вопрос был задан, ответил, забыл, я искал способ сделать выше и не смогнайти прямой ответ в любом месте.Итак, добавление, чтобы это могло пригодиться.:)

Мой первый ответ тоже.:)

0 голосов
/ 15 сентября 2013
proc sql;
 create table inNamesNotIncheck
 as
 select *
 from names n
 where not exists
 (select name
 from check c
 where n.name=c.name);
quit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...