Hi all;
I wanna try to automatize my macro code by using some macro variable values and its names. Current stiuation like that:
%let datasets=dsn1 dsn3 dsn2 dsn4;
%let datasets_labels=label1 label3 label2 label4;
%macro prog_Loop;
%let i=1;
%do %while(%scan(&Datasets.,&i.,%str( ))~=);
%prog (%scan(&Datasets.,&i.,%str()),%scan(&Datasets_labels.,&i.,%str( )));
%let i=&i.+1;
%end;
%mend;
%prog_Loop;
......
There are lots of macro program(prog1,prog2,prog3,etc.) and structure is same. I wanna package some of these macro programs. So, I wanna go one step forward to automatize structure. User should only define the label and corresponding dataset as separate macro variables at once( beginining of package).The required ones for each macro program is collapsed in each code as below.(User is not a party in this step) .My desired structure is at below:
%let label1=dataset1;
%let label2= dataset2;
%let label3= dataset3;
%let label4= dataset4;
After macro variables are defined by user then code collapse them within datasets and datasets_labels macro variables. I can create datasets macro variable from macro varables defined, however, i cannot create datasets_labels macro variables because the macro variable names are required instead of macro varible values.I think I need to read macro variables name in somewhere. How can i create datasets_labels macro variable from macro varaibles shown in top?
%macro prog1_Loop;
%let datasets=&label1 &label3 &label2;
%let datasets_labels=label1 label3 label2; /*I need to define macro variables names here*/
%let i=1;
%do %while(%scan(&Datasets.,&i.,%str( ))~=);
%prog (%scan(&Datasets.,&i.,%str()),%scan(&Datasets_labels.,&i.,%str( )));
%let i=&i.+1;
%end;
%mend;
%macro prog2_Loop;
%let datasets=&label4 &label3 ;
%let datasets_labels=label4 label3 ; /*I need to define macro variables names here*/
%let i=1;
%do %while(%scan(&Datasets.,&i.,%str( ))~=);
%prog (%scan(&Datasets.,&i.,%str()),%scan(&Datasets_labels.,&i.,%str( )));
%let i=&i.+1;
%end;
%mend;
.....
%macro package();
%prog1_loop;
%prog2_loop;
.....
%mend package;
%package();
Thank you
... View more