[code:2h6470s1]data raw;
input @3 x $ y;
datalines;
1 a 1
2 b 1
3 a 5
4 b 8
5 a 6
6 a 7
2 b 1
;
data a;
set raw(where=(x='a'));
id=_n_;
rename y=a_y;
run;
data b;
set raw(where=(x='b'));
run;
data out(keep=x y pair);
if _n_=1 then do;
length x $8;
declare hash h(dataset:'a',ordered:'yes');
declare hiter iter('h');
h.defineKey('id');
h.defineData('id','a_y');
h.defineDone();
call missing(id,a_y);
end;
set b;
pair=_n_;
do while(iter.next()=0);
if diff=. or abs(y-a_y) le diff then do;
diff=abs(y-a_y);
temp_ay=a_y;
a_key=id;
end;
end;
rc=h.remove(key:a_key);
output;
x='a';
y=temp_ay;
output;
run;[/code:2h6470s1]