just for fun;
you can find which value is at which nesting level, even for recursive case
resetline;
/* "Recursive loop" */
%macro R2(s,e,b);
%if %sysevalf(&s. <= &e.) %then
%do;
%local _SYSMEXECDEPTH;
%let _SYSMEXECDEPTH=%sysfunc(abs(%SYSMEXECDEPTH),z10.) ;;
%put &_SYSMEXECDEPTH. &=s. &=e. &=b.;
data _null_&_SYSMEXECDEPTH.;
SET sashelp.vmacro (where=(scope NE 'AUTOMATIC'));
depth = &_SYSMEXECDEPTH. ;
ord+1;
run;
data _null_;
run;
%R2(%sysevalf(&s.+&b.) /* change in s */
,%sysevalf(&e.*1.001) /* change in e */
,&b.) /* keep b unchanged */
%end;
%mend R2;
options mprint;
%put %R2(0,2,0.25);
data all/view=all;
set _NULL_:;
run;
proc sql;
create table variablesScope as
select min(ord) as ord
,scope
,name
,offset
,value
,x.m-count(distinct depth) as depth
from all,(select max(depth)+1 as m from all) as x
group by 2,3,4,5
order by 1,2,3,4,5
;
quit;
:
Bart
... View more