2016-08-18 98 views
0

我有兩個數據集。合併SAS數據集

數據集:甲

EE_ID  PRJ_CD 
100055 406 
100055 475 
100055 492 
300028 475 

數據集:乙

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 

任何幫助,將不勝感激。

謝謝!

+1

'如果一個輸出;'?? 'A'將一直是空的,使用這個代碼你根本不應該有結果。請在您的問題中設置文本格式。這並不難。 – fl0r3k

回答

-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。如果您不能在流程的早期刪除它們,可以將它們放在合併語句中。

data want; 
    merge a(in=in1 drop=ssn emp_cd) b ; 
    by ee_id; 
    if in1; 
run; 
1

正如上面提到的fl0r3k,您提供的代碼不起作用,您將得不到結果。

一旦你通過EE_ID分類AB你可以使用下面的代碼:

data final; 
merge a b; 
    by ee_id; 
    run; 

我不知道你的意圖是什麼與IF A THEN OUTPUT;如果你有B中更多的記錄比顯示在你的榜樣只有想在A記錄,然後根據你的榜樣A和B的數據集

data final; 
merge a (in=a) b; 
    by ee_id; 
    if a ; 
    run; 

上面你會得到兼用代碼相同的結果嘗試。