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

问题描述 投票:0回答:2

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

现在我有代码

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

%mend meanStat;

%meanStat(hits, runs)`

有了这个我得到错误:

错误22-322:语法错误,期望以下之一:名称,;,/,ALL,CHARACTER,CHAR,NUMERIC。

我也应该使用“parmbuff”

macros sas
2个回答
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);

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;
© www.soinside.com 2019 - 2024. All rights reserved.