You are going to need to take control.
PROC SQL noprint ;
Select memname, input( scan( memname, -1, '_' ), best8.) as suffix_number
Into :name_list separated by ' ' , ther
where libname = 'SAP' and memname like 'TEMP%'
Order by suffix_number
the open=defer causes the data sets to only be opened when they are ready to be read. Otherwise all 150 data sets would have to be open at one time (the default). Under some (most I would assume) OSs there are limits as to the number of open data sets.
Using the colon operator in your original code allowed the data sets to be read as they were encountered, which was apparently not in named order.
As mentioned OPEN=DEFER does just that defers opening the files until they are read. The files must contain exactly the same variables to use Deferred opening which you implied. If not you may have to concatenate in smaller groups.
To the OP: Peter.C provided you a suitable solution, where a macro variable is generated and you have total control how you might want to sequence the files. Have a look back at the thread for details.