The example below takes data with numerous records from a single household, with a variable hh indicating head of household (0=head) and matches that person with a corresponding spouse (hh=1 or 2). It saves the sex and ethnicity, and identifies mixed marriages.
data all; input hid hh anything eth sex; cards; 1 0 1 1 1 2 0 2 1 2 2 9 3 2 1 3 0 4 2 1 3 1 5 2 2 3 9 6 1 1 4 0 7 3 2 4 9 8 5 1 5 0 9 2 2 5 2 10 6 1 5 9 11 4 1 ; run; proc sort data=all; by hid; run; data hh; set all(rename= (eth=hheth sex=hhsex) ); if hh = 0 then output; run; data spouse; set all(rename= (eth=speth sex=spsex) ); if hh = 1 or hh = 2 then output; run; data married; merge spouse(in=tspouse) hh(in=thh) ; by hid; hh = thh; spouse = tspouse; if speth = . then mixed = .; else if hheth EQ speth then mixed = 0; else mixed = 1; run; proc freq data=married; tables hh*spouse; run; proc print data=married; run;