龙空技术网

SAS知识分享3 之 如何删除用户定义的宏变量

Star课堂 29

前言:

今天大家对“sas改变变量类型”大致比较着重,看官们都需要知道一些“sas改变变量类型”的相关文章。那么小编也在网上收集了一些对于“sas改变变量类型””的相关内容,希望同学们能喜欢,同学们快快来了解一下吧!

在实际工作中,SAS程序员不会删除不需要的宏变量,但为了保持干净的字典表,并释放相应的内存,我们应该删除相应不需要的宏变量。

在SAS中,可以使用 %SYMDEL 语句或 CALL SYMDEL 例程SAS 宏变量。这两个方法都可以从全局符号表中删除指定的宏变量。

删除1个宏变量

假设有一个宏变量,并将其删除,可以使用 %SYMDEL 或 CALL SYMDEL 实施删除。%symdel用法如下:

%let my_macro_var = my defined var;%put &my_macro_var.;%symdel my_macro_var;%put &my_macro_var.;

结果输出如下:

CALL SYMDEL用法:

%let my_macro_var = my defined var;%put &my_macro_var.;data _null_;call symdel("my_macro_var");run;%put &my_macro_var.;

结果输出如下:

删除多个宏变量

可以使用 %SYMDEL 语句和 CALL SYMDEL 例程来删除 SAS 中的多个宏变量。相比较而言, %SYMDEL 语句需要较少的 SAS 代码。

在以下示例中,将创建宏变量code_onecode_twocode_three。要使用 %SYMDEL 语句删除这些宏变量,只需要一个语句。但是,如果使用 CALL SYMDEL 例程,则需要为要删除的每个变量提供一个单独的例程。

使用 %SYMDEL 语句:

%let code_one = A;%let code_two = B;%let code_three = C;%put &code_one.;%put &code_two.;%put &code_three.;%symdel code_one code_two code_three;%put &code_one.;%put &code_two.;%put &code_three.;

结果输出如下:

使用 CALL SYMDEL 例程:

%let code_one = A;%let code_two = B;%let code_three = C;%put &code_one.;%put &code_two.;%put &code_three.;data _null_;call symdel("code_one");call symdel("code_two");call symdel("code_three");run;%put &code_one.;%put &code_two.;%put &code_three.;

结果输出如下:

删除多个具有相似名称的宏变量

前面展示了如何删除宏变量,但如有100个宏变量,那就要写100个宏变量,则需要写100次,那会比较麻烦。可以写宏函数进行删除,具体语法如下:

%macro deleteSamePattern(pattern);%local macro_vars_to_delete;proc sql noprint;select name into :macro_vars_to_delete separated by " "from dictionary.macroswhere scope="GLOBAL"and name contains upcase("&pattern.");quit;%put variables to be deleted:;%put ¯o_vars_to_delete.;%symdel ¯o_vars_to_delete.;%mend deleteSamePattern;%let code_one = A;%let code_two = B;%let code_three = C;%deleteSamePattern(pattern=code_);

结果输出如下:

删除所有的宏变量

如果要删除所有的宏变量,你可能会想到 %SYMDEL _ALL_; 但这个语句不起总用,若要删除宏变量,需要使用宏函数,具体如下:

%macro deleteAllMacroVars();%local macro_vars_to_delete;proc sql noprint;select name into :macro_vars_to_delete separated by " "from dictionary.macroswhere scope="GLOBAL"and not substr(name, 1, 3) = "SYS"and not name = "GRAPHTERM";quit;%symdel ¯o_vars_to_delete.;%mend deleteAllMacroVars;%let code_one = A;%let code_two = B;%let code_three = C;*---显示删除前宏变量;title "显示删除前宏变量";proc sql;select * from dictionary.macroswhere scope = "GLOBAL"and not substr(name, 1, 3) = "SYS"and not name = "GRAPHTERM";quit;%deleteAllMacroVars();*---显示删除后宏变量;title "显示删除后宏变量";proc sql;select * from dictionary.macroswhere scope = "GLOBAL"and not substr(name, 1, 3) = "SYS"and not name = "GRAPHTERM";quit;title;

结果输出如下:

结论可以使用 %SYMDEL 语句和 CALL SYMDEL 例程来删除宏变量。使用 %SYMDEL 语句,可以一次删除多个宏变量。使用 CALL SYMDEL 例程时,需要对每个变量进行单独的调用。可以将 %SYMDEL 语句用作 SAS 程序中的单独语句或宏函数。在数据步骤(或数据 _null_)中使用 CALL SYMDEL 例程。宏函数是删除所有宏变量(以相同模式开头)所必需的。 %SYMDEL _ALL_ 无法删除所有宏变量。

标签: #sas改变变量类型 #sas更改变量类型