Maybe my eyes need to checked by a doc, but i can't see anything about having 600 vars in your starting post. Using an array with a simple loop seems to be appropriate.
Untested fragment:
data work.want;
set have;
by account;
array vars fico beacon dpd ...;
array diffs fico_diff beacon_diff dpd_diff ...;
do i = 1 to dim(vars);
diffs[i] = lag(vars[i]);
if first.account then do;
diffs[i] = 0;
end;
end;
run;
... View more