我有两个数据集。
DATASET:A
EE_ID PRJ_CD
100055 406
100055 475
100055 492
300028 475
DATASET:B
EE_ID SSN EMP_CD
100055 0100055 E
300028 0300028 E
我已经排序&通过EE_ID合并上述两个数据集。
DATA FINAL;
MERGE A B;
BY EE_ID;
IF A THEN OUTPUT;
RUN;
输出:
EE_ID PRJ_CD SSN EMP_CD
100055 475
100055 492
100055 406 0100055 E
300028 475 0300028 E
SSN
和EMP_CD
只会填充一行,其余两行对EE_ID = 100055
为空。
我的期望是: -
EE_ID PRJ_CD SSN EMP_CD
100055 475 0100055 E
100055 492 0100055 E
100055 406 0100055 E
300028 475 0300028 E
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:1)
正如上面提到的fl0r3k,您提供的代码不起作用,您将得不到任何结果。
按A
对B
和EE_ID
进行排序后,您可以使用以下代码:
data final;
merge a b;
by ee_id;
run;
我不确定你对IF A THEN OUTPUT;
的意图是什么如果B中的记录多于你的例子中显示的记录而只想在A中包含记录,那么试试
data final;
merge a (in=a) b;
by ee_id;
if a ;
run;
根据您上面的示例A和B数据集,您将获得使用任一代码的相同结果。
答案 1 :(得分:-1)
您的代码适用于您的示例数据。
data a;
input ee_id prj_cd ;
cards;
100055 406
100055 475
100055 492
300028 475
;
data b ;
input ee_id ssn emp_cd $;
cards;
100055 0100055 E
300028 0300028 E
;
data want;
merge a(in=in1) b ;
by ee_id;
if in1;
run;
您的实际数据可能已在A数据集上具有SSN和EMP_CD。如果在此过程中无法删除它们,则可以将它们放在merge语句中。
data want;
merge a(in=in1 drop=ssn emp_cd) b ;
by ee_id;
if in1;
run;