我希望使用 select into: 在宏模块中创建全局变量。
%macro example();
proc sql noprint;
select x into:DDD from aaa;
quit;
%mend;
问题是我想创建一个全局变量DDD,在这个例子中我们只能获取局部变量DDD。 谢谢。 韦恩。
我认为您无法控制 Proc SQL 中的范围。您可以在数据步骤中使用调用 symputx 来指定范围。
但是,通过 Proc SQL 在开放代码中创建的宏变量默认是全局的。在宏中它将是本地的。
如注释中所述,您还可以使用
显式地将宏变量声明为全局变量 %global macro_variable_name;
正如 @Reeza 指出的那样,您可以简单地使用
%global DDD;
语句指定您希望宏变量全局位于宏的开头。
只有一个焦点:
有时您可以从另一个宏中调用一个宏。 在这种情况下,您可以在外部宏中预先存在与本地相同的宏变量。 使用
%global
语句调用内部宏时,您可能会遇到错误,因为同一宏变量的全局和局部定义之间存在冲突 (ERROR: Attempt to %GLOBAL a name (XXX) which exists in a local environment.
)。
在这种情况下,您可以:
%let
、
sql into:
或
call symput
的(非)值)避免
%global
语句在内宏中
我们执行此步骤是将本地sqlobs值转换为全局distinctobs值/ %do i=1 %to &sqobs %by 1; %global DistinctVal&i; %let DistinctVal&i=&&Dval&i; %结尾; /我们执行此步骤将本地 Dval1-.... 值转换为全局 DistinctVal1-...值/ %修正不同值;