【问题标题】:SAS Parameter ListSAS 参数列表
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多