• SAS学习笔记40 SAS程序运行过程


    当我们提交运行一个DATA步程序后,具体发生了什么事情。

    SAS程序与其他程序一样,在运行时都要经过两个阶段:编译(Compilation)、执行(Execution)

    • 程序首先经过编译阶段,该阶段主要检查代码语法错误,以及执行一些编译时语句及创建PDV,缓存等相关的环境。如果发现代码存在语法错误,则不进入执行阶段,并且将发现的所有语法错误问题在日志中显示;
    • 如果在编译阶段未发现语法错误,则程序会进入执行阶段,真正运行代码,读取数据,处理数据。

    SAS程序中的语句,按照其在编译阶段还是执行阶段生效,可分为三种:

    • 仅在编译阶段有效,例如:length、format、label、retain、keep、drop等语句,一般是有关变量属性的语句;

    • 仅在执行阶段有效,例如:if-else、do while等条件控制及循环语句;

    • 在编译和执行阶段都有效,例如:set、merge等语句,在编译阶段会读取数据的元数据信息,在执行阶段开始读取数据。

    其实SAS程序在编译之前还有一个更细节的步骤,称之为“Tokenization”;这个过程类似于文本挖掘当中的分词过程。该过程将整段程序分块,然后逐一读取。完成这项工作的组件称之为“Word Scanner”,该组件将程序拆分成一个个的小块,称之为“Token”。

    所以,Token就类似于分词过程中词典中的词,它有以下4种形式:

    • Literal:用引号引起来的字符串

    • Number:包括:纯数字、日期常量、时间常量、十六进制数

    • Name:以字母或者下划线开头的字符串

    • Special:其他的一些符号,例如:* / + - ** ; $ ( ) . & % =

    在完成Tokenization的过程时,涉及到一个区域叫“Input Stack”。它就是在内存中的一块区域。用于临时保存提交的代码。所以,更深入一些来看,当你提交SAS程序后有以下4个过程:

    1. 将提交的代码Copy到Input Stack

    2. Word Scanner完成Tokenization的工作,启动编译器,发送Tokens到Compiler;

    3. Compiler接收Word Scanner发送的Tokens。如果所有的Tokens都接收完毕,或者遇到一个DATA Step boundary,开始Compiling;

    4. 程序编译完无错误,开始Executing

    Compiler每遇到一个DATA STEP Boundary,就停止接收Tokens。开始编译当前的程序,并且执行;等当前的程序执行完毕后,重新开始接收Tokens,直到遇到下一个DATA Step Boundary,编译执行;依次循环运行。

  • 相关阅读:
    iOS开发的一些奇巧淫技2
    iOS开发的一些奇巧淫技
    指定控制器跳转
    去掉UITableView HeaderView或FooterView随tableView 移动的黏性
    TextView随键盘弹出上移高度
    The Swift Programming Language-官方教程精译Swift(9) 枚举-- --Enumerations
    登录记住账号和密码小Demo
    The Swift Programming Language-官方教程精译Swift(8)闭包 -- Closures
    The Swift Programming Language-官方教程精译Swift(7)函数 -- Functions
    The Swift Programming Language-官方教程精译Swift(6)控制流--Control Flow
  • 原文地址:https://www.cnblogs.com/abble/p/11263402.html
Copyright © 2020-2023  润新知