data a;
set b;
by projectid theoryday;
retain overdue_num max_overduedays accu_overduedays accu_liquidateddamages;
if first.projectid then do;
overdue_num=0;max_overduedays=0;accu_liquidateddamages=0;accu_overduedays=0;
end;
if overduedays>0 then do;
overdue_num=overdue_num+1;
if .<actualday<=intnx('month',loanday,time_on_book,'S') and cleanstate in (1,2,3) then
max_overduedays=max(max_overduedays,overduedays+1);
else do;
max_overduedays=max(max_overduedays,intck('day',theoryday,intnx('month',loanday,time_on_book,'S'))+1);
accu_overduedays=max(accu_overduedays,intck('day',theoryday,intnx('month',loanday,time_on_book,'S'))+1);
end;
end;
else do;overdue_num=0;max_overduedays=0;accu_overduedays=0;end;
accu_liquidateddamages=accu_liquidateddamages+payedliquidateddamages;
run;