我正在尝试为我的宏参数设置默认变量。我在一个网站上找到了这个例子:
%macro myprint (var1, var2=t);
PROC PRINT data = &var1..&var2;
Run;
%mend myprint;
/* Macro Call */
%myprint (store,)
但是当我尝试运行它时,我得到错误:找到的位置参数比定义的更多。
我正在使用SAS 9.2。我有什么不同的事情吗?
答案 0 :(得分:2)
SAS宏中有两种参数:位置参数和命名参数。可以将它们混合起来,尽管一般来说这是一个坏主意。
命名参数与您的var2=t
类似。必须在调用中通过名称明确指定它们。这实际上是大多数时候的“最佳实践”;它确保您定义了正确的参数(忘记宏中参数的顺序有多容易?)
命名参数可以按任何顺序使用,并且可以省略(无论它们是否具有默认值)。例如,
%macro myprint(var1=,var2=t);
...
%mend;
这将为var2设置默认值,但不为var1设置默认值;它仍然必须提供,或者它将评估为空白(可能是好的或可能不是)。
位置参数正如它们听起来的那样:由宏定义中的位置定义的参数。必须按顺序提供它们(当然),如果它们被省略,则默认为空白。它们不能提供默认值。位置参数必须在命名参数之前 - 即,您无法完成
%macro myprint(var2=t,var1);
因为这会让事情过于混乱。
因此,在您的情况下,如果您想保留名为1的1位置,只要在不提供var2
时删除额外的','。