在同一步骤中合并并在合并数据集中创建变量

时间:2015-07-20 13:38:21

标签: merge sas

我正在合并SAS中的两个数据集," set_x"和#34; 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 ;

但是,在生成的表格中,#34;匹配",缺少E的值。如果我只输出匹配值(即使用if x=y;),则会正确计算E.

是否可以创建" E"如果输出不匹配和匹配的观察结果,在相同的数据步骤中?

1 个答案:

答案 0 :(得分: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 ;