2016-02-26 90 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

相关问题