【问题标题】:error while setting default macro parameters SAS 9.2设置默认宏参数 SAS 9.2 时出错
【发布时间】:2013-12-06 15:55:04
【问题描述】:

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

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

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

但是当我尝试运行它时,我得到 ERROR: More positional parameters found than defined.

我使用的是 SAS 9.2。我有什么不同的事情要做吗?

【问题讨论】:

  • 你的宏调用需要两个参数。%myprint(var1=store,var2=t);我还建议在你的宏定义后添加一个分号并删除你的 var2 声明。%macro myprint(var1,var2); 另外,如果 var2 总是 't' 那么为什么要把它作为参数?
  • @scott,这只是一个默认值 - 当 var2 未提供给宏调用时提供(这是允许的)。

标签: sas


【解决方案1】:

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

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

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

这将为 var2 设置默认值,但不会为 var1 设置默认值;它仍然必须提供,否则它会评估为空白(可能没问题)。

位置参数就像它们听起来的样子:由宏定义中的位置定义的参数。它们必须按顺序提供(当然),如果它们被遗漏,它们默认为空白。不能为它们提供默认值。位置参数必须在命名参数之前——也就是说,你不能这样做

%macro myprint(var2=t,var1);

因为那会让事情变得太混乱了。

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

【讨论】:

  • 哇很好的解释!这澄清了很多事情。
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2022-07-17
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
相关资源
最近更新 更多