The macro is dynamic to generate multiple Excel files containing the frequency results for each unique BY-group. (e.g., Type).
PROC SQL SELECT code is embedded inside a macro in this SAS example.
The SELECT query processes the column (passed in the macro parameter) and then create a macro variable with the number of unique (distinct) value in the column, and a macro variable with the list of unique values separated with ”-”
The macro uses the [PROC FREQ](https://www.9to5sas.com/proc-freq-in-sas/) procedure, an iterative macro %DO statement, a %SCAN function, and WHERE= data set option to dynamically send the results to an Excel spreadsheet for each BY-group.
options symbolgen symbolgen mprint;%macro MULTEXCELFILES(DS,COL,OUTPATH);* Get the count of unique values in the column;proc sql noprint;/* number of unique values */select count(distinct &col) into :mprodtype_cntfrom &ds order by `&col;`select distinct &col into :mprodtype_lst separated by"-" /* list of product types */from &ds order by `&col;`quit;%do j=1 %to `&mprodtype_cnt;`ods Excel file="&outpath/%SCAN(&mprodtype_lst,&j,-).xlsx"style=styles.barrettsblue options(embedded_titles="yes");title "&col. - %SCAN(&mprodtype_lst,&j,-)";* Frequency of the column;proc freq data=&ds(where=(&col="%SCAN(&mprodtype_lst,&j,-)"));tables &col.;run;ods Excel close;%end;%put `&mprodtype_lst;`%mend MULTEXCELFILES;/******* END OF FILE *******/%multExcelfiles(ds=SASHELP.CARS, col=TYPE,outpath=/home/subhroster20070/examples);
