码迷,mamicode.com
首页 > 其他好文 > 详细

sas Data步数据读取流程详解

时间:2015-07-06 15:51:08      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

data me;
put _n_= x=;
    
/*******1******/ input x/*
input这里是读入缓冲流的关键步骤变量是从缓冲流中取出数据,根据缓冲流中指针的位置来获取变量信息*/;

/*INPUT statement causes SAS to read the first record of raw data into the input buffer. Then, according to the instructions in the INPUT statement, SAS reads the data values in the input buffer and assigns them to variables in the program data vector*/
/*将记录读入缓冲流,从缓冲流中读出数据,再将数据赋值给pdv,这是input语句的工作*/

/*******2******/ put x=; /*对读取的数据进行操作的步骤放在input和cards之间*/

/*每一个data步结束,进行的工作有如下几个 1:清空pdv 2:返回data步开头 3:_n_递增1 4:_error_设置为0 5:将pdv中的数据写入数据集*/
/*******3******/ cards;
1  /*每一行代表一个record,一个input将一条record读入input buffer,然后再分别对input 后的pdv变量进行赋值*/
    2
    3
;
run;

data步中input和其余可执行语句之间的执行顺序问题

这里是按顺序执行

1:执行put _n_ x;输出结果为 _N_=1 x=. 执行input,跳转到cards语句输入第一行观测值,(此时x已有值),执行put x=,输出x=1执行到run,清空pdv,返回data步开头

2:执行put _n_ x;输出结果为 _N_=2 x=. (前一步因为已清空了pdv,所以x为缺失值) 执行input,跳转到cards语句输入第二行观测值,(此时x已有值),执行put x=,输出x=2执行到run,清空pdv,返回data步开头

3:执行put _n_ x;输出结果为 _N_=3 x=. (前一步因为已清空了pdv,所以x为缺失值) 执行input,跳转到cards语句输入第三行观测值,(此时x已有值),执行put x=,输出x=3执行到run,清空pdv,返回data步开头

4:执行put _n_ x;输出结果为 _N_=4 x=. (前一步因为已清空了pdv,所以x为缺失值) 执行input,跳转到cards语句输入第四行观测值,但因为读取到了底部,所以直接跳转到run,退出程序。

 

 

编译阶段所做的工作

When you submit a DATA step for execution, SAS checks the syntax of the SAS statements and compiles them, that is, automatically translates the statements into machine code. SAS further processes the code, and creates the following three items

当向系统提交data步执行时,sas检验语法并进行编译(也就是将其转化为机器代码,计算机能识别的代码,010101),然后sas会进一步处理代码代码,并创造如下三个项目:

input buffer:

is a logical area in memory into which SAS reads each record of data from a raw data file when the program executes. (When SAS reads from a SAS data set, however, the data is written directly to the program data vector.)

内存中存储一行record的逻辑存储区域,只有从raw data中读取时才产生,如果直接从数据集中读取,并不会山上,数据集中的数据是直接写入pdv

pdv(program data vector)

is a logical area of memory where SAS builds a data set, one observation at a time. When a program executes, SAS reads data values from the input buffer or creates them by executing SAS language statements. SAS assigns the values to the appropriate variables in the program data vector. From here, SAS writes the values to a SAS data set as a single observation

建立数据集的内存中的逻辑区域,一般是一条观测对应一个,程序执行时,会从input buffer中读取数据,或直接依靠sas系统语句赋值。

descriptor information

is information about each SAS data set, including data set attributes and variable attributes. SAS creates and maintains the descriptor information. 

数据集属性和变量属性的描述信息。

 

技术分享

当一个数据步结束后只会有三项工作进行,缓冲流中的数据指针的位置并不会自动转到下一个record中,使其转到下一个record中的原因是当前record已读取完毕,才会转入下一个record!

 

sas Data步数据读取流程详解

标签:

原文地址:http://www.cnblogs.com/yican/p/4052644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!