我只是在学习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
答案 0 :(得分: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所在的行(不是)。
答案 1 :(得分:3)
您的要求不明确。是否要从people_info
中删除所有无效的SSN并将其放入新数据集中?如果是这样,这应该工作。您必须首先按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;