当我们提交运行一个DATA步程序后,具体发生了什么事情。
SAS程序与其他程序一样,在运行时都要经过两个阶段:编译(Compilation)、执行(Execution)
- 程序首先经过编译阶段,该阶段主要检查代码语法错误,以及执行一些编译时语句及创建PDV,缓存等相关的环境。如果发现代码存在语法错误,则不进入执行阶段,并且将发现的所有语法错误问题在日志中显示;
- 如果在编译阶段未发现语法错误,则程序会进入执行阶段,真正运行代码,读取数据,处理数据。
SAS程序中的语句,按照其在编译阶段还是执行阶段生效,可分为三种:
-
仅在编译阶段有效,例如:length、format、label、retain、keep、drop等语句,一般是有关变量属性的语句;
-
仅在执行阶段有效,例如:if-else、do while等条件控制及循环语句;
-
在编译和执行阶段都有效,例如:set、merge等语句,在编译阶段会读取数据的元数据信息,在执行阶段开始读取数据。
其实SAS程序在编译之前还有一个更细节的步骤,称之为“Tokenization”;这个过程类似于文本挖掘当中的分词过程。该过程将整段程序分块,