使用sas select into:语句来创建全局宏变量

时间:2016-07-04 03:31:56

标签: macros sas proc-sql

我希望使用select into:在宏模块中创建一个全局变量。

%macro example();
   proc sql noprint;
      select x into:DDD from aaa;
   quit;
%mend;

问题是我希望创建一个全局变量DDD,在这个例子中我们只能得到局部变量DDD。 谢谢。 韦恩。

2 个答案:

答案 0 :(得分:1)

我认为您无法控制Proc SQL中的范围。您可以在数据步骤中使用调用symputx来指定范围。

但是,默认情况下,通过Proc SQL在开放代码中创建的宏变量是全局变量。在一个宏内它将是本地的。

如评论中所述,您还可以使用

将宏变量明确声明为全局变量
 %global macro_variable_name;

答案 1 :(得分:0)

正如@Reeza指出的那样,您只需使用%global DDD;语句指定宏开头的宏变量global。

只有一个焦点:

有时您可以从另一个宏内部调用一个宏。 在这种情况下,您可以在外部宏中将相同的宏变量预先存在为local。 在%global语句中回忆内部宏,由于同一个宏变量(ERROR: Attempt to %GLOBAL a name (XXX) which exists in a local environment.)的全局定义和本地定义之间的冲突,您可能会遇到错误。

在这种情况下,你可以:

  • 在外部宏
  • 中也将宏变量预定义为全局
  • 将宏变量预先定义为本地(或简单地为其赋予{非}值%letsql into:call symput)在外部宏避免内部宏
  • 中的%global语句

取决于您具有的宏观变量可见性要求。