2016-12-25 78 views
1

我有2个数据集,如下所示。在SAS中使用更新和合并

dataset ab; 
input m; 
cards; 
    102 
    103 
    104 
run; 

dataset ac; 
input m; 
cards; 
102 
102 
103 
103 
104 
104 
104 
run; 

时写在下面陈述,

data a; 
merge ab ac; 
by m; 
run; 

我得到的输出作为102 102 103 103 104 104 104

但是当我写更新语句,

data b; 
update ab ac; 
by m; 
run; 

我得到输出为102 103 104.

你能否向我解释一下更新声明中发生了什么。

Thanks in Advance, 
Nikhila 

回答

2

更新将事务1应用为1.主表必须具有唯一BY值,这是正确的。事务表具有倍数,但没有任何新值,因此不会添加它们。

如果事务的BY值不在表中,它会添加它。

通过更新和以下可能会有帮助:

  1. BY值在交易数据集和主 - >在主记录与交易价值的更新。如果BY组的事务表中有多个记录,则它们按顺序应用。 Master表中只有一条记录与事务表中最后一条匹配的值。
  2. BY值在交易中,不在master - >记录被添加到master表
  3. BY值不在交易中,在master中 - > master中的记录保持不变。

如果您将第二个变量添加到唯一的测试数据集中,这将更容易看出。

+0

感谢您的解释:)我明白清楚 –

0
data ab; 
    input m @@; 
    cards; 
101 102 103 104 
;;;; 
    run; 
data ac; 
    input m @@; 
    cards; 
102 102 103 103 104 104 104 
;;;; 
    run; 

data b; 
    update ab ac(in=in1); 
    by m; 
    if first.m then tCount=0; 
    tCount + in1; 
    run; 
proc print; 
    run; 

enter image description here