设置默认宏参数SAS 9.2时出错

时间:2013-12-06 15:55:04

标签: sas

我正在尝试为我的宏参数设置默认变量。我在一个网站上找到了这个例子:

%macro myprint (var1, var2=t);
            PROC PRINT data = &var1..&var2;
            Run;
%mend myprint;

/* Macro Call */
%myprint (store,)

但是当我尝试运行它时,我得到错误:找到的位置参数比定义的更多。

我正在使用SAS 9.2。我有什么不同的事情吗?

1 个答案:

答案 0 :(得分:2)

SAS宏中有两种参数:位置参数和命名参数。可以将它们混合起来,尽管一般来说这是一个坏主意。

命名参数与您的var2=t类似。必须在调用中通过名称明确指定它们。这实际上是大多数时候的“最佳实践”;它确保您定义了正确的参数(忘记宏中参数的顺序有多容易?) 命名参数可以按任何顺序使用,并且可以省略(无论它们是否具有默认值)。例如,

%macro myprint(var1=,var2=t);
...
%mend;

这将为var2设置默认值,但不为var1设置默认值;它仍然必须提供,或者它将评估为空白(可能是好的或可能不是)。

位置参数正如它们听起来的那样:由宏定义中的位置定义的参数。必须按顺序提供它们(当然),如果它们被省略,则默认为空白。它们不能提供默认值。位置参数必须在命名参数之前 - 即,您无法完成

%macro myprint(var2=t,var1);

因为这会让事情过于混乱。

因此,在您的情况下,如果您想保留名为1的1位置,只要在不提供var2时删除额外的','。