If the loans are sorted by Quarter than the following step seems to solve the problem:
data work.want;
set work.loans(drop= LoanTransfer rename=(UniqueId = ExpectedId));
length
UniqueId $ 24
changedClient changedLoan changedOpenQuarter 8
;
drop changed: lastQuarter;
retain UniqueId;
changedClient = lag(Client) ^= Client;
changedOpenQuarter = lag(OpenQuarter) ^= OpenQuarter;
changedLoan = lag(Loan) ^= Loan;
lastQuarter = lag(Quarter);
if _n_ = 1 or changedClient or changedOpenQuarter or (lastQuarter >= Quarter) then do;
UniqueId = cats(Loan, '-', Lender);
end;
run;
... View more