SAS doesn't really do a "read ahead", but it does readily do a "retain". If the data always have the rank at the end, you could sort by sub and descending rank and then use a data step and retain to propagate the values to the "new" forward.
although SAS does not "read ahead", this is not forecasting so just read it any way you want ;-)
For a base SAS table, using the POINT= option of the SET statement, you can "read in reverse".[pre]data updated_data ;
do _n_ = top to 1 by -1 ;
set your.data point= _n_ nobs= top ;
if not missing(rank) then old_rank= rank ;
else rank = old_rank ;
drop old_rank ;