SAS:如果数据集与另一个数据集中的观察值匹配,则从数据集中删除观察值

Cla*_*lay 2 sas

我只是在学习SAS.这是一个非常简单的问题 - 我可能会过度思考它.

我有一个调用的数据集people_info,其中一个变量是SocialSecurityNum.我有一个名为invalid_ssn单变量的表:唯一和无效的SocialSecurityNum观察.

我希望有一个DATA步骤(或PROC SQL步骤),invalid_people_info如果SocialSecurityNum人(观察者)与invalid_ssn表中的某个值匹配,则输出.否则,它将输出回people_info.

最好的方法是什么?

编辑:更多信息,澄清......

people_info 看起来像这样:

name     SocialSecurityNum
joe      123
john     456
mary     876
bob      657
Run Code Online (Sandbox Code Playgroud)

invalid_ssn 看起来像这样:

SocialSecurityNum
456
876
Run Code Online (Sandbox Code Playgroud)

我想要的是people_info改变(到位),看起来像这样:

name     SocialSecurityNum
joe      123
bob      657
Run Code Online (Sandbox Code Playgroud)

和一个新表,称为invalid_people_info这样:

name     SocialSecurityNum
john     456
mary     876
Run Code Online (Sandbox Code Playgroud)

sco*_*ott 5

Hong Ooi显示的数据步骤很棒,但您也可以使用proc sql执行此操作,而无需先进行排序,也无需实际进行完全合并.

proc sql noprint;

   create table invalid_people_info as
   select *
   from people_info
   where socialsecuritynum in (select distinct socialsecuritynum from invalid_ssn)
   ;

   create table people_info as
   select *
   from people_info
   where socialsecuritynum not in (select distinct socialsecuritynum from invalid_ssn)
   ;

quit;
Run Code Online (Sandbox Code Playgroud)

这只是在无效ssn的不同列表中选择ssn所在的所有行(不是).