创建SAS宏来处理任意数量的变量

时间:2018-03-06 05:25:09

标签: macros sas

我希望在SAS中创建一个宏,它将计算数据集中任意数量的数值变量(变量是参数并由用户输入)的平均值。我只知道如何逐个输入变量,并且不确定如何设置变量,因此在调用宏时可以输入任意数量的变量,谢谢。

现在我有代码

%macro meanStat/parmbuff;
%put Syspbuff contains: &syspbuff;
proc means data = sashelp.baseball mean;
var &syspbuff;

%mend meanStat;

%meanStat(hits, runs)`

有了这个,我得到了错误:

  

错误22-322:语法错误,需要以下其中一项:名称,;,/,所有 CHARACTER CHAR NUMERIC

我也应该使用“parmbuff”

2 个答案:

答案 0 :(得分:0)

不知道为什么要这样做。最佳做法是使用SAS内置的快捷列表。

您可以将变量引用为:

*indexed list;
VAR var1-var20

*With common prefix;
var var: ; *will select all variables that start with var;

*with general reference;
var _numeric_ ; *runs for all numeric variables;

如果你想要一个宏,只要你传递一个以空格分隔的列表就没有问题。

%macro mean_useless(dsn=, var_list=);
  proc means data=&dsn;
  var &var_list;
  run;

%mend;

%mean_useless(dsn=sashelp.class, var_list = weight height age);

答案 1 :(得分:0)

您不需要使用/parmbuff选项输入变量名称列表。只是不要在列表中使用逗号。你为什么还要用逗号?

%macro meanStat(varlist);
proc means data = sashelp.baseball mean;
  var &varlist;
run;
%mend meanStat;

如果您确实想使用/parmbuff,请仔细查看传递给SYSPBUFF宏变量的值。它将包括()和逗号。对于你的问题,你也不想要。试试这个:

%macro meanStat/parmbuff;
%put Syspbuff contains: &syspbuff;
%put We want this: %sysfunc(translate(&syspbuff,%str( ),(,)));
%mend meanStat;