please try the below code
data have1;
input policy_no trans_date:date9. amount;
format trans_date date9.;
cards;
1 01Jan2019 500
1 01Feb2019 500
2 30Jan2019 300
2 28Feb2019 300
;
data have2;
input policy_no date_received:Date9. lapse_score itc_score;
format date_received date9.;
cards;
1 01Dec2018 50 500
2 01Jan2019 10 700
2 15Jan2019 30 610
;
proc sql;
create table want as select b.*, a.trans_date, a.amount from have1 as a left join have2 as b on a.policy_no=b.policy_no and b.date_received<= a.trans_date
order by b.policy_no, a.trans_date,b.date_received;
quit;
data want2;
set want;
by policy_no trans_date;
if last.trans_date;
run;
... View more