Autocall Macro是由SAS提供的一些实现特定功能的Macro Program,可以在代码中直接使用

  • 其中以Q开头的相比正常的多了隐藏特殊字符的功能(称之为Macro Quoting);

  • K开头的代表是专门针对DBCS(Double Byte Character Set)语言设计的,即适用于类似中文的双字节存储语言

SAS学习笔记42 宏程序-LMLPHP

为什么INDEX函数返回的结果是8呢?

因为像INDEX、FIND等这类搜索函数是通过单字节编码进行查找的,有两个过程:

  1. 首先将所有的字符串转换成编码,每个字节对应一个编码;

  2. 然后按照编码进行搜索;

1个汉字占2个字节,就会对应2个编码。在某些特殊的情况下,就会出现这种情况:某2个汉字共4个编码,第1个汉字的第2个编码与第2个汉字的第1个编码凑成的编码,正好是要搜索的汉字的编码。虽然该汉字没有在查找的文本中出现,但是其编码出现了。然后就会返回搜索到的编码位置:

SAS学习笔记42 宏程序-LMLPHP

三个有关Macro的System Option,在日志中输出更加详细的信息:

  • MPRINT:在日志中输出Macro生成的SAS代码;

  • MLOGIC:在日志中输出Macro的执行逻辑;

  • MSYMBOLGEN:在日志中输出Macro Variables的解析结果;

Delete User-Defined Macro

跟Macro Variable一样,如果不想再用某个Macro Program,也可以将其删除掉。语法非常简单:

%SYSMACDELETE macro_name;

05-11 22:50