I explain,
XorYisvoid= is for knowing that X or Y was void, but i didn't undestand the behavior of your data.
voidValue = for retaining the last value.
So you will need a do loop in scl, and some macrovariables. 89 variables is too much for programing with simple if.
The next code preteds to collect your variables names, and after using a do loop to fill 1 to 1 the variables, B to A, C to B ...
But i have a cuestion, the 89th var have to refill the other 88 if all are null? then you have to start from 89 to 1.
First of all you have to make a data step with variables, something like:
VarData
_N_ VarName
1 Name, (we call it A)
2 State, (we call it B)
3 ...
do i=1 to dim (Vardata-1)
call simput('Myindex',i);
submit continue;
data _NULL_;
if _N_ eq &MyIndex Then call simput ('ValueThatIhaveToFill',VarName);
if _N_ eq &MyIndex+1 Then call simput ('ValueThatIhaveToPass',VarName);
run;
data TheDataiHave;
If &ValueThatIhaveToFill eq '' then &ValueThatIhaveToFill (name, state) = &ValueThatIhaveToPass;
run;
endsubmit;
end; (do loop)
This is not tested but i think it's basically that you want.