How can I use Proc SQL to find all the records tha

2019-03-21 13:05发布

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;

标签: sql sas
4条回答
虎瘦雄心在
2楼-- · 2019-03-21 13:36

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楼-- · 2019-03-21 13:37

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;
查看更多
smile是对你的礼貌
4楼-- · 2019-03-21 13:48
proc sql;
 create table inNamesNotIncheck
 as
 select *
 from names n
 where not exists
 (select name
 from check c
 where n.name=c.name);
quit;
查看更多
Bombasti
5楼-- · 2019-03-21 13:49

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. :)

查看更多
登录 后发表回答