目标:在一个数据集b中,我们已经根据特定条件筛选出了子数据集c,继而,还想分析b中除了c以外的样本;即我们如何筛选两个集合的差集?
做法:我们可以采取如下几种办法:
/*方法1:用data步的merge函数生成差集a_1*/
data a_1;
merge b c(in=in1);
by SAMPLEID;
if not in1;
run;
/*方法2:sql挑选差集a_2*/
proc sql;
create a_2 as
select * from b
except
select * from c;
quit;
/*方法3:sql挑选差集a_3*/
proc sql;
create table a_3 as
select * from b where ID not in (select ID from c);
quit;
方法2和方法3不一样之处在于:方法2筛选的是两个数据集完全不一样的样本;方法3筛选的是特定列不一样的样本。
/*方法4:sql语言的写法(使用左连接)*/
proc sql noprint;
create table a_4 as
select k.*
from b as k
left join
b as s
on k.id=s.id
where missing(s.id);
quit;
/*方法5:用主键的方法*/
data c(INDEX=id));set c;run;
data a_5;
set b;set c;key = id;
if _Error_ = 1 then do;output;end;
run;