@derekcra your overall problem is that you want to do an iterative lookup over add1 and for each lookup in add1, do a lookup in add2 (as I interpret your code).
Therefore, you should have the add2.find() Method call inside the loop.
Something like this will do
data hash_join_template;
if _n_ = 1 then do;
declare hash add1(dataset:'data2',multidata:"Y");
add1.defineKey('field_1');
add1.defineData('field_3');
add1.defineDone();
declare hash add2(dataset:'data3');
add2.defineKey('field_3');
add2.defineData('field_4');
add2.defineDone();
end;
set data1;
format field_3 $10.;
format field_4 5.;
do while (add1.do_over() = 0);
rc_join2 = add2.find();
output;
end;
drop rc_join2;
run;
Result:
field_1 field_2 field_3 field_4
A M A 1
B F A 1
B F B 4
B F C 7
C F A 1
C F D 9
... View more