How can I use Proc SQL to find all the records that only exist in one table but not the other?

五迷三道 提交于 2020-01-12 03:58:23

问题


I'm trying to do this in Enterprise Guide, with a task, otherwise I would just use a data step.

In a data step, this would be:

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;

回答1:


Here's one way. There are surely many others.

proc sql;
 create table not_in_check as
 select name
 from names
 where name not in (select name from check);
quit;



回答2:


Another slight variation is:

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;



回答3:


The following method is pretty simple way to get records present in one table and not in the other.

Created table new with records containing sex = M, the result after the query will be records with sex = F.

Example:

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;

Will put the code to test on my actual datasets which are of around 100k obs and update the result.

P.S: I know the question has been asked answered and forgotten,I was looking for a way to do the above and couldn't find a direct answer any where. So, adding so that it may come handy. :)

My first answer also. :)




回答4:


proc sql;
 create table inNamesNotIncheck
 as
 select *
 from names n
 where not exists
 (select name
 from check c
 where n.name=c.name);
quit;


来源:https://stackoverflow.com/questions/8946593/how-can-i-use-proc-sql-to-find-all-the-records-that-only-exist-in-one-table-but

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!