我希望在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”
答案 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;