@Tom wrote: @PeterChen wrote: My code is wrong. I just want to explain the question I face... There is no formats._NAME_. I just want to loop the formats value name in the proc freq once instead of typing/coping multiple times and change the formats name. To loop over a list of values place the list into a macro variable and use %SCAN(). You can use %SYSFUNC(COUNTW()) to find out how many items are in the list. %let fmt_list=fmta. fmtb. ;
%do i=1 %to %sysfunc(countw(&fmt_list,%str( )));
%let fmt=%scan(&fmt_list,&i,%str( ));
.... format x &fmt. ...
%end; proc catalog catalog=formats; contents out=fmtcontents(keep=name);
quit;
proc sql noprint;
select name into :fmtnames
from fmtcontents;
quit;
%let fmt_list=&fmtnames. ; %do i=1 %to %sysfunc(countw(&fmt_list,%str( ))); %let fmt=%scan(&fmt_list,&i,%str( ));
proc freq data = data;
tables col1 * col2/MISSING norow nocol nopercent;
format col1 &fmt.;
run;
%end; I put the unique format names into macro variable fmtnames but got incorrect result: The col1 did not format...
... View more