2

我只是在学习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

invalid_ssn看起来像这样:

SocialSecurityNum
456
876

我想要的是people_info改变(就地)并看起来像这样:

name     SocialSecurityNum
joe      123
bob      657

和一个新表,称为invalid_people_info如下所示:

name     SocialSecurityNum
john     456
mary     876
4

2 回答 2

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;

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

于 2013-07-16T15:19:44.003 回答
3

你的要求不清楚。是否要删除所有无效的 SSNpeople_info并将它们放入新数据集中?如果是这样,这应该工作。您必须首先按 SocialSecurityNum 对数据集进行排序。

data people_info invalid_people_info;
    merge people_info (in=a) invalid_ssn (in=b);
    by SocialSecurityNum;
    if b then output invalid_people_info;
    else output people_info;
run;
于 2013-07-15T02:06:01.383 回答