SAS Macro 由两部分组成:Macro variables and Macro.
Macro variable :
- 命名规范:需要遵循 SAS 变量命名规范(不超过32 characters, 以下划线或字母开始,只包含数字、字母或下划线)。Macro variable value 长度不超过64000 characters.
- Local & Global : Local macro variable is defined insides the macro, which can be used only in the macro. Global macro is defined outsides the macro, which can be used exerywhere in the program. Local macro variable 可以被转换成 Global macro variable, 反之亦然。
- 使用宏变量:给宏变量添加前缀&就可以调用宏变量。当需要把 macro variable 放进引号时,由于SAS macro process无法识别单引号,必须将其放进双引号。
%let iterations = 10; %let country = New Zealand; DO i = 1 to &iterations; TITLE "Addresses in &country";
Macro :
%MACRO macro-name; macro-text %MEND macro-name;
- 命名规范:Macro name 要遵循和 macro variable name 一致的命名规范。Macro name in %mend is optional but it's better to have it.
- 添加逻辑判断:%IF-%THEN 比 IF-THEN 的功能更多,比如包含在 DATA,PROC 步外层。其他带%的逻辑语句也是。
%IF condition %THEN action; %ELSE %IF condition %THEN action; %ELSE action; %IF condition %THEN %DO; SAS statements %END;
在 macro 运行中,会自动产生一些系统宏变量,常见的有:
&SYSDATE : the character value of the date that job or session began,e.g. 28MAY08
&SYSDAY:the day of the week that job or session began,e.g.Wednesday
- CALL SYMPUT("macro-variable-name",value) : 将DATA步的值赋值给一个宏变量,使后面的代码可以调用它。value 可以是一个变量或一个具体的值,当时一个具体的值时,必须放进引号。
IF Age >= 18 THEN CALL SYMPUT("status", "Adult"); ELSE CALL SYMPUT("status", "Minor"); IF TotalSales > 1000000 THEN CALL SYMPUT("bestseller", BookTitle);
注意:由于只有在DATA步运行后才会将值赋给宏变量,所以用CALL SYMPUT创建的宏变量无法在它所在的当前DATA步中使用,只能在后面的代码语句中使用。
- System Options for macro debugging: 在执行 macro 前面添加 options 帮助输出 macro 执行的一些信息。常用的 options :粗体是选项的默认设置。
/*Usage*/
OPTIONS MPRINT NOSYMBOLGEN NOMLOGIC;
/*Options MPRINT*/ %macro mktitle(proc,data); title "%upcase(&proc) of %upcase(&data)"; %mend mktitle; options mprint; %mktitle; /*Directing MPRINT Output to an External File - use mfile*/ options mfile mprint; filename mprint 'debugmac';
标签:name,Macro,笔记,variable,macro,SAS,变量 From: https://www.cnblogs.com/zooz-logging/p/16754005.html