如何使用Proc SQL查找仅存在于一个表中但不存在于另一个表中的所有记录?

时间:2012-01-20 19:09:33

标签: sql sas

我正在尝试使用任务在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 个答案:

答案 0 :(得分:9)

这是一种方式。肯定有很多其他人。

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

答案 1 :(得分:7)

另一个微小的变化是:

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;

答案 2 :(得分:1)

以下方法是将记录存在于一个表而非另一个表中的非常简单的方法。

创建表new,其中包含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;

将代码测试我的实际数据集,大约100k obs并更新结果。

P.S:我知道这个问题已被问及已被回答并被遗忘,我正在寻找一种方法来完成上述工作并且无法在任何地方找到直接答案。所以,添加它可能会派上用场。 :)

我的第一个答案也是。 :)

答案 3 :(得分:0)

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