2016-02-26 54 views
1

我有表格t1和t2,如何創建表格t3?基本上我想在t1中更新Var2,其中t1.Key = t2.Key,使用t2中的數據,同時保持t1中的所有內容相同。使用SAS中的另一個表更新表格

表T1

Key Var1 Var2 

1 A AA 
2 B BB 
3 C CC 
4 D DD 
5 E EE 

表T2

Key Var1 Var2 
3 C XX 
4 D YY 
6 F FF 

表T3

Key Var1 Var2 
1 A AA 
2 B BB 
3 C XX 
4 D YY 
5 E EE 

下面的SAS代碼只會給我的錯誤:

proc sql; 
update t1 
set var2 = t2.var2 
from t1 
inner join t2 on 
t1.key=t2.key; 
quit; 

謝謝!

回答

0

您可以在數據步驟中使用update語句。 Update語句與merge語句非常相似,區別在於除非您指定,否則它們不會替換缺少值的填充值。另外,非唯一鍵會生成警告,這對調試很有幫助。

更新表和創建同時一個新的一般語法:

語法

data NewTable; 
    update MasterTable 
      TransactionTable; 
    by key(s); 
run; 

爲了做一個update操作與您的數據,你需要確保你的兩個數據集要麼通過關鍵變量進行排序或編制索引。如果未對其進行排序或編制索引,SAS會發出抱怨,更新將失敗。通常,我只需在最後步驟中添加index選項,以創建主數據集或事務數據集。它往往會節省一些時間,因爲防止了額外的分揀步驟。

第1步:確認表1 & 2要麼索引或鍵

data t1(index=(key)); 
    <ETL stuff>; 
run; 

data t2(index=(key)); 
    <ETL stuff>; 
run; 

步驟2排序:創建一個新表,T3,由T2

更新與匹配值T1
data t3(index=(key)); 
    update t1(in=t1_key) /* Same thing as SQL t1.key */ 
      t2(in=t2_key); /* Same thing as SQL t2.key */ 
    by key; 

    /* This is SAS's way of specifying a left-join */ 
    if(t1_key); 
run; 

雖然你並不特別需要在t3這裏index=選項,這是很好的做法,讓您的關鍵VA可索引索引或應用完整性約束。

+0

非常有幫助的Stu。非常感謝! – guudeer

相關問題