Sorry, this is confusion for me, and looks like I confused everyone as well. Let me explain once again with simple case. So, my question is, If there is anyway , if I can store ds1, ds2,ds3,ds4 in one variable[like, %let ds=ds1,ds2,ds3,ds4; ] and pass the same into "%macro mymac1(&ds);". below code works fine, when I hard code ds1,ds2,ds3,ds4 etc.... %let no_of_dataset=4; %let diff_dataset=SASHELP.CARS,SASHELP.AIR,SASHELP.GAS,SASHELP.CLASS; %macro mymac1(ds1,ds2,ds3,ds4); %do i=1 %to &no_of_dataset; proc print data=&&ds&i(obs=2); %end; %mend; %mymac1(&diff_dataset); But, below code does not seems to be correct with error. %let no_of_dataset=4; %let diff_dataset=SASHELP.CARS,SASHELP.AIR,SASHELP.GAS,SASHELP.CLASS; %let ds=ds1,ds2,ds3,ds4; %macro mymac1(&ds); %do i=1 %to &no_of_dataset; proc print data=&&ds&i(obs=2); %end; %mend; %mymac1(&diff_dataset); Error message: 73 %let no_of_dataset=4; 74 %let diff_dataset=SASHELP.CARS,SASHELP.AIR,SASHELP.GAS,SASHELP.CLASS; 75 %let ds=ds1,ds2,ds3,ds4; 76 %macro mymac1(&ds); ERROR: Invalid macro parameter name &. It should be a valid SAS identifier no longer than 32 characters. ERROR: A dummy macro will be compiled. 77 %do i=1 %to &no_of_dataset;; 78 proc print data=&&ds&i(obs&ds=2); 79 %end; 80 %mend; 81 82 %mymac1(&diff_dataset);
... View more