2016-07-29 34 views
1

我有兩個數據集:基地(主表)updateX(更新表可能包含新觀察)更新主表與更新表,而在主表中沒有觀測SAS

data base; 
    input Field1 $ Field2 $ Field3 $ Field4 $; 
    datalines; 
F 0001 20160501 ABC 
NF 0001 20160502 CDF 
NF 0002 20160601 ABC 
NF 0002 20160602 CDF 
    ; 
run; 

data updateX; 
    input Field1 $ Field2 $ Field3 $ Field4 $; 
    datalines; 
F 0001 20160502 CDF 
F 0002 20160602 CDF 
F 0003 20160603 CDF 
    ; 
run; 

我的期望輸出

F 0001 20160501 ABC 
F 0001 20160502 CDF 
NF 0001 20160502 CDF 
F 0002 20160602 CDF 
F 0003 20160603 CDF 

我的努力:

data base; 
    modify base updateX; 
    by Field2 Field3; 
run; 

回答

4

具有修改你需要告訴SAS更換或輸出取決於如果記錄匹配或不匹配。

data base; 
    modify base updatex; 
    by field2 field3; 
    if _iorc_ eq 0 then replace; 
    else do; 
     output; 
     _error_=0; 
     end; 
    run; 

如果您可以使用UPDATE創建新的數據集,這會更容易。隨着更新,匹配記錄被更新,然後輸出(替換)以及來自事務文件的新記錄被輸出。

data ubase; 
    update base updatex; 
    by field2 field3; 
    run; 
+0

其實MERGE可能比UPDATE更好,如果你想讓你的新記錄完全替代匹配的舊記錄。使用UPDATE,你需要採取額外的步驟來強制缺少一個值。 – Tom

+0

因爲我每個月得到3GB數據,我需要每天更新數據。哪種語法的效率最高?再次感謝 – useR

+0

@useR您需要進行一些研究和測試。更新將創建一個新的數據,這可能不是你想要的。主鍵索引的主鍵是什麼?您需要徹底閱讀有關MODIFY的文檔。 –