【发布时间】:2017-10-27 15:25:47
【问题描述】:
我想改进一个 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);
它可以工作,但是有没有更好的方法可以在没有数据和 proc sql 步骤的情况下做到这一点?
【问题讨论】:
-
您是否有任何理由不将所有这些变量放入 proc freq 中的单个
tables语句中? -
我不明白这个问题。您的宏已经接受了一个接受值列表的参数。你想改变什么?
-
呃...我忘了我可以。
标签: sas