@SASdevAnneMarie you could add a parameter to @Stu_SAS macro XMACRO to execute a macro within the %DO;
%macro split_data(data=, splits=, xmacro=xmacro);
%let dsid = %sysfunc(open(&data));
%let n = %sysfunc(attrn(&dsid, nlobs));
%let rc = %sysfunc(close(&dsid));
%put Total obs: &n;
%put -------------------------------;
%do s = 1 %to &splits;
%let firstobs = %sysevalf(&n-(&n/&splits)*(&splits-&s+1)+1, floor);
%let obs = %sysevalf(&n-(&n/&splits)*(&splits-&s), floor);
%&xmacro;
%put split: &s;
%put firstobs: &firstobs;
%put obs: &obs;
%put total: %eval(&obs-&firstobs+1);
%put -------------------------------;
%end;
%mend;
%macro xmacro;
data cars_split&s(label="&data &firstobs:&obs");
set &data(firstobs=&firstobs obs=&obs);
run;
%mend xmacro;
%split_data(data=sashelp.cars, splits=3);
... View more