SAS中全局宏变量的类型

SAS中全局宏变量的类型,sas,sas-macro,Sas,Sas Macro,我们可以调用由创建的全局宏变量吗 %让,, %做, callsymput, sql into子句 宏参数 请告诉我。为了便于讨论,最高范围是全局范围 安培或superq分辨率时使用的宏变量是当前或最近的更高范围。如果需要同一命名宏变量值,且该值的范围高于默认值,则必须从字典表(SASHELP.VMACRO)中查询该值 当计划从宏调用中执行的代码填充全局宏变量时,请使用%global语句声明该宏变量 使用宏函数%SYSMEXECDEPTH可以知道宏的执行深度。还有许多其他宏函数用于“反射”宏系统,

我们可以调用由创建的全局宏变量吗 %让,, %做, callsymput, sql into子句

宏参数


请告诉我。

为了便于讨论,最高范围是全局范围

安培或superq分辨率时使用的宏变量是当前或最近的更高范围。如果需要同一命名宏变量值,且该值的范围高于默认值,则必须从字典表(SASHELP.VMACRO)中查询该值

当计划从宏调用中执行的代码填充全局宏变量时,请使用%global语句声明该宏变量

使用宏函数%SYSMEXECDEPTH可以知道宏的执行深度。还有许多其他宏函数用于“反射”宏系统,主要是中的SYS*和SYM*函数

举个例子。即使在宏执行深度中调用zoot,zoot宏也会填充全局宏变量age

options nocenter;

%let MY_MACRO_VAR = global;

%macro foo;
  %local MY_MACRO_VAR;
  %let MY_MACRO_VAR = local_1;

  %put &=MY_MACRO_VAR;

  options nolabel;
  title "&SYSMACRONAME %nrstr(%SYSMEXECDEPTH=)%SYSMEXECDEPTH";
  proc sql;
    select * from dictionary.macros
    where name = 'MY_MACRO_VAR';
  quit;
  options label;

  %bar;
%mend;

%macro bar;
  %local MY_MACRO_VAR;
  %let MY_MACRO_VAR = local_%SYSMEXECDEPTH;

  %put &=MY_MACRO_VAR;

  options nolabel;
  title "&SYSMACRONAME %nrstr(%SYSMEXECDEPTH=)%SYSMEXECDEPTH";
  proc sql;
    select * from dictionary.macros
    where name = 'MY_MACRO_VAR';
  quit;
  options label;

  %put &SYSMACRONAME %nrstr(%SYSMEXECDEPTH=)%SYSMEXECDEPTH;
  %put _user_;  

  %if %SYSMEXECDEPTH=2 %then %bar;

  %zoot
%mend;

%macro zoot;
  %global my_global;
  proc sql noprint;
    select age into :my_global from sashelp.class where name = 'Jane';
  quit;
%mend;

%foo;

%put _user_;

与宏系统的其他交互(如EXECUTE、SYMGET或RESOLVE)的范围可能变得相当微妙。

调用是什么意思?你的意思是扩大它们的价值吗?范围界定: