2015-07-20 113 views
0

我正在合併SAS,「set_x」和「set_y」中的兩個數據集,並且想要在生成的合併數據集「匹配」中創建變量「E」:合併並在同一步驟中創建合併數據集中的變量

* Create set_x *; 
data set_x ;    
input merge_key A B ; 
datalines;    
1 24 25 
2 25 25 
3 30 32 
4 32 32 
5 20 32 
6 1 1 
; 
run; 

* Create set_y *; 
data set_y ;    
input merge_key C D ; 
datalines;    
1 1 1 
2 2 1 
3 1 1 
4 2 1 
5 1 1 
7 1 1 
; 
run; 

* Merge and create E *; 
data matched unmatched_x unmatched_y ; 
merge set_x (in=x) set_y (in=y) ; 
by merge_key ; 
if x=y then output matched; 
     else if x then output unmatched_x ; 
     else if y then output unmatched_y ; 
    IF C = 2 THEN DO ; 
     E = A ; 
    END; 
    ELSE DO ; 
    E = floor(B - D) ; 
    END ; 
run ; 

但是,在結果表「匹配」中,E的值缺失。如果我只輸出匹配值(即使用if x=y;),則E被正確計算。

如果輸出不匹配和匹配的觀測值,是否可以在同一數據步驟中創建「E」?

回答

2

您在計算E之前輸出了結果,然後在下一次迭代開始時將E設置爲丟失。所以你希望E在輸出之前可用,

data matched unmatched_x unmatched_y ; 
merge set_x (in=x) set_y (in=y) ; 
by merge_key ; 
    IF C = 2 THEN DO ; 
     E = A ; 
    END; 

    ELSE DO ; 
    E = floor(B - D) ; 
    END ; 
if x=y then output matched; 
     else if x then output unmatched_x ; 
     else if y then output unmatched_y ; 

run ;