SAS参数表

SAS参数表,sas,Sas,我想改进一个SAS宏,它循环遍历一些变量并为它们打印频率表 以下是工作宏: %macro iraCatFreq(IRACatsList); %local i next; %let i=1; %do i=1 %to %sysfunc(countw(&IRACatsList)); %let next=%scan(&IRACatsList,&i); proc freq data=out.SCF16_Cath; weight WGT; by ANY

我想改进一个SAS宏,它循环遍历一些变量并为它们打印频率表

以下是工作宏:

%macro iraCatFreq(IRACatsList);
%local i next;
%let i=1;
%do i=1 %to %sysfunc(countw(&IRACatsList));
    %let next=%scan(&IRACatsList,&i);
    proc freq data=out.SCF16_Cath;
    weight WGT;
    by ANYPEN;
    tables &next;
    format rRothContrBin allBinaries_format.; 
    run;
%end;
%mend iraCatFreq;
%iraCatFrew(rRothContrBin sRothContrBin oRothContrBin rRegContrBin sRegContrBin oRegContrBin);
我希望通过将变量名的参数列表(rRothContrBin sRothContrBin oRothContrBin rRegContrBin sRegContrBin oRegContrBin)替换为单个参数来改进此宏

以下是我拼凑的方法:

/*Create a table of variable names for IRA types and owners*/

data IRACats;
    infile datalines;
    length x $ 17;
    input x $;
    datalines;
rRothContrBin
sRothContrBin
oRothContrBin
rRegContrBin
sRegContrBin
oRegContrBin
    ;

/*Convert table of strings into a macro variable, &IRACatsList */

proc sql noprint;
    select x into :IRACatsList separated by ' '
    from IRACats;
quit;
%put IRACatsList = &IRACatsList;
在运行此方法后,我尝试运行宏

%iraCatFreq(&IRACatsList);

它可以工作,但是没有数据和过程sql步骤有更好的方法吗?

您可以使用单个宏变量调用现有宏,而无需使用以下过程sql或数据步骤:

%let IRACatsList = rRothContrBin sRothContrBin oRothContrBin rRegContrBin sRegContrBin oRegContrBin;
%iraCatFreq(&IRACatsList);

您可以使用单个宏变量调用现有宏,而无需使用proc sql或以下数据步骤:

%let IRACatsList = rRothContrBin sRothContrBin oRothContrBin rRegContrBin sRegContrBin oRegContrBin;
%iraCatFreq(&IRACatsList);

有什么理由不把所有这些变量放在proc freq中的一个
语句中吗?我不明白这个问题。您的宏已经接受了一个接受值列表的参数。你想改变什么?呃。。。我忘了我可以。你有什么理由不把所有这些变量放在proc freq中的一个
语句中?我不明白这个问题。您的宏已经接受了一个接受值列表的参数。你想改变什么?呃。。。我忘了我能。