user2568648
user2568648

Reputation: 3201

Merge and create variable in merged dataset in same step

I am merging two datasets in SAS, "set_x" and "set_y", and would like to create a variable "E" in the resulting merged dataset "matched":

* 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 ;

However, in the resulting table "matched", the values of E are missing. E is correctly calculated if I only output matched values (i.e. using if x=y;).

Is it possible to create "E" in the same data step if outputting unmatched as well as matched observations?

Upvotes: 0

Views: 187

Answers (1)

Haikuo Bian
Haikuo Bian

Reputation: 906

You have output the results before E is computed, then E is set to missing when next iteration starts. So you want E to be available before the output,

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 ;

Upvotes: 2

Related Questions