zoukankan      html  css  js  c++  java
  • 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,编译执行;依次循环运行。

  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/abble/p/11263402.html
Copyright © 2011-2022 走看看