If the number of values is small enough that they can fit into a single macro variable (65K bytes) then just modify your PROC SQL step.
Unless your %INCLUDE files all contain only statements that can run inside a the single data step you probably need to switch your DO loop to a %DO loop.
proc sql noprint;
select distinct cust_id
into :cust_id_list separated by '|'
from cust_id_list
;
%let no_cust_id = &sqlobs;
quit;
%do index=1 to &no_cust_id;
%let cust_id = %scan(&cust_id_list,&index,|);
%include "Program 1";
%include "Program 2";
%include "Program 3";
%include "Program 4";
%end;
... View more