创建SAS宏以处理任意数量的变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建SAS宏以处理任意数量的变量相关的知识,希望对你有一定的参考价值。
我希望在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”
答案
不知道你为什么要这样做。最佳做法是使用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);
另一答案
您无需使用/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;
以上是关于创建SAS宏以处理任意数量的变量的主要内容,如果未能解决你的问题,请参考以下文章