合并SAS数据集

时间:2016-08-18 09:50:27

标签: sas

我有两个数据集。

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  

SSNEMP_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   

任何帮助都将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

正如上面提到的fl0r3k,您提供的代码不起作用,您将得不到任何结果。

ABEE_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;