/* Method 3: Macro with CALL SYMPUT Routines */ /* Step 1: Read parameter file, declare FILENUM, store the total */ /* number of observations, and create a macro call for each */ /* observation */ data _null_; set pfile end=last; if last then call symput('filenum',left(_n_)); call symput ('file' || left(_n_), '%process('||strand||','||grade||','||form||','|| mnum||','||onum||','||mstart||','||ostart||')' ); ________________________________________________________________________ %let file1=%process(m,4,11,19,3,9,29); %let file2=%process(m,4,12,18,5,12,31); more SAS statements %let file19=%process(m,6,20,18,3,12,31); /* Step 2: write a macro that processes the data files */ %macro process(strand,grade,form,mnum,onum,mstart,ostart); data raw; infile dd(&strand.&grade.&form); input @&mstart (m1-m&mnum) ($1.) @&ostart (o1-o&onum) (1.); proc freq; tables m1-m&mnum o1-o&onum; %mend; /* Step 3: Invoke macro PROCESS in a loop */ %macro invoke; %do i=1 %to &filenum; &&file&i %end; %mend; %invoke