SAS DATA步对于SAS入门学习者来说是个难以理解的东西,因为SAS封装了一些过程。这种封装对于有语言基础的人来说反而是一个障碍,本文非常详细的解释了SAS 数据的编译、执行过程,对于了解SAS的基本运行有很大帮助。不管SAS老鸟,新鸟,相信你都会有收获,因为这篇文章是难得的如此系统 !
==================================== Cut =======================================
摘要
每个SAS数据步(SAS Data step,以后写成简写“DATA步”)在整个SAS程序中编译和执行过程中。大量DATA步的处理过程都是非明示的(即隐藏不可见)。例如,尽管程序中没有使用循环控制语句不包含循环,但DATA步都像一个自封装的小程序以一种非明示的循环形式执行。这篇文章探讨了一些非明示的DATA处理过程怎么控制你的DATA步实际运行的。
需要提前说明的概念:
- 程序数据向量(Logical Program Data Vector简写成PDV,台湾地区翻译成“程式资料向量”)
- SAS自动变量名及其使用
- 理解data步的内部处理过程
- 代码编译期间发生的事情
- 程序执行期间实际发生了什么
- 如何获取和存储变量属性
Data步设计的非常好,但是有些另类。如果你想写出很漂亮的代码,就很有必要知道DATA步的工作原理。读完这篇文章以后,“哦,哦,… 原来如此!”,一个即使使用SAS多年的老鸟,也会发出这样的感叹。 from http://saslist.net
==================================== Cut =======================================
引言
DATA步是建SAS数据集的主要方法之一。要想成为一个优秀的SAS程序员很有必要理解DATA步的各个环节,主要是因为一些涉及数据处理和创建数据集的任务可能只能通过DATA步才能解决(这些任务不能通过SAS过程步(SAS procedures,以后简写成“SAS过程步”)解决、或者使用SAS过程步太过复杂而难以使用)。
了解DATA步的生命周期非常重要,它分为编译和执行两个阶段。同时学习PDV也非常重要。PDV贯穿SAS的编译和执行两个阶段,而且能决定了信息在DATA步中的存储及变化。
编译阶段包括:
- 编译SAS语句,包括检查语法
- 创建一个输入缓存区(input buffer)(如果需要读入原始数据文件)、一个PDV和描述性信息
- 计算Data步迭代的次数(从Data语句开始)
- 将PDV中的所有变量设成缺失值并初始化自动变量
- 读取输入观测(从原始文件或SAS数据集)
- 执行附加的处理或计算语句
- 将一条数据记录写入输出数据集并返回到DATA步语句
- PDV是内存中的一个临时逻辑区域,SAS建立数据集时,每条观察值只有一次机会用到PDV。
- 包含所有变量的当前值
- 包含两个自动变量:_N_和_ERROR_
DATA 步
一个DATA步包含SAS语言中的一组语句,这些语句具有以下功能:
- 从外部文件读入数据
- 将数据写入外部文件
- 读入SAS数据集和SAS视图
- 创建SAS数据集和SAS视图
可以运用DATA步:
- 创建SAS数据集(SAS数据集或SAS视图)
- 根据包含原始数据(外部文件)的文件创建SAS数据集
- 通过提取子集、合并、修改和更新已经存在数据集的方式来创建新的数据集
- 分析、处理或展现数据
- 为新变量赋值 (译者注:有公式计算的情况下)
- 撰写报告或将文件写入磁盘或磁带
- 信息检索
- 文件管理
DATA步的生命周期图
SAS提供了下面的流程图来描述DATA步的处理过程。