DATA步中PDV(Program Data Vector)

时间:2024-04-04 14:22:21

SAS中DATA步运行包含两个阶段:

  • 编译阶段
  • 运行阶段

一、编译阶段

  1. 检查语法错误
    常见语法错误:关键字和变量拼写错误、标点符号缺失、选项无效等
  2. 创建Input butter缓冲区----->Raw data时才创建。
  3. 创建PDV
  4. 创建数据集的描述性部分

Input butter缓冲区 :DATA中Input语句中从Raw Data中读取数据时,才会创建缓冲区;如果使用set语句读取SAS数据集时,则将数据直接复制到PDV中,而不创建缓冲区。

二、执行阶段

DATA步中PDV(Program Data Vector)

  1. DATA步每执行一个周期,称作一个循环,所以在data步中的变量顺序,就是数据集中的变量顺序
  2. 每次循环在PDV中的变量初始化成缺失值,循环计数_N_=1
  3. input语句从infile语句中定义的文件中读取一条记录,并写入PDV中
  4. 判断是否读入结束
  5. 执行其他语句,其他语句可以更改当前观测
  6. 每次DATA步结尾的时候,PDV中的值,会写入SAS数据集,然后回到data步的顶端。
  7. data步执行直到读取到文件的末尾,结束
  8. 并生成SAS log,记录raw data中的数据全部读取完成,读取了数据集的观测数和变量数。

三、PDV(Program Data Vector):

  1. 用于存放数据集的变量和自动变量,DATA步每读入一行记录,就存入PDV中,数据来自于Input butter或SAS执行语句。
  2. 自动变量(不会写入数据集):
    _N_:从1开始,每执行一次DATA步就加一。
    _ERROR_:
                     0---表示没有错误,默认值。
                     1---表示有1个或多个错误。
  3. DATA步执行一次,就读取一行 外部文件,除非使用其他特殊语句
  4. 编译时PDV的变化依次如下图:
    图片来源:碧水幽幽泉的博客
    DATA步中PDV(Program Data Vector)

四、读Raw data时,以下情况不会置为缺失值:

  1. 在Retain语句中的变量
  2. 在SUM语句中创建的变量
  3. 数组中的成员变量
  4. 在FILE or INFILE语句中创建的变量
  5. 自动变量

五、执行阶段错误:

1、在log中note warning error 信息

2、在log中PDV中存储的值

3、当前步停止

六、如何测试程序:

  1. 写一个空数据集:DATA NULL;
    如果外部文件特别大,创建数据集会很耗时间,可以用这种方法看一下语法对不对
  2. 减少观测数
  3. 使用put语句:
    字符串---用引号引起来
    数据集中的变量
    自动变量:_N_,_ERROR_,_ALL_
    条件处理语句