SAS数据步编译与执行_第1页
SAS数据步编译与执行_第2页
SAS数据步编译与执行_第3页
SAS数据步编译与执行_第4页
SAS数据步编译与执行_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据步入门

SAS语言是一种专用的数据管理、分析语言,它提供了很强的数据操作能力。这些数据操作能力表现在它可以容易地读入任意复杂格式的输入数据,并可以对输入的数据进行计算、子集选择、更新、合并、拆分等操作。另外,SAS系统还提供了用来访问其它数据库系统如Sybase、Oracle的接口,访问各种微机使用的数据库文件,如FoxPro、Excel的接口及向导,并提供了一个SQL过程来实现数据库查询语言SQL的功能。

SAS语言直接、间接用于数据管理的语句很多,本章只能介绍最常用的一些语句。1数据步入门

SAS语言的编程计算功能主要在数据步实现。一个SAS数据步相当于一个单独运行的程序。但是,SAS语言又是一个专用数据处理语言,所以SAS数据步有其它语言所没有的特点。我们以下面的简单例子说明这一点:dataa;

putx=y=z=

inputxy

z=x+y

putx=y=z=

cards;

1020100200

;run;

(sasLan21.sas)2数据步入门

……X=.Y=.Z=.X=10Y=20Z=30X=.Y=.Z=.X=100Y=200Z=300X=.Y=.Z=.NOTE:ThedatasetWORK.Ahas2observationsand3variables.运行后在LOG窗口显示如下记录:这个程序的运行流程是这样的:

⑴DATA语句标志了数据步开始,并指定了数据步结束时要生成的数据集名字为A(实际是WORK.A)。3数据步入门

⑵第一个PUT语句要输出变量X、Y、Z的值,但它们还都没有定义,所以LOG窗口的结果显示为三个缺失值.⑶下面是INPUT语句,它从CARDS语句后面的数据行中读取变量X的值10,变量Y的值20。

⑷下一个赋值语句计算变量Z的值得到30。因此,LOG窗口中的第二行输出显示三个变量的值分别为10、20、30。

⑸从CARDS语句开始到空语句(;)的各行是非执行的,程序运行到RUN语句,发现这是本数据步的最后一个语句,按一般的程序语言的规则,程序到这里就应该结束了,程序中的第二行数据100200就不能被读入.4数据步入门

但SAS是一个专用的数据处理语言,所以,这个程序运行到RUN语句后,先把读入的观测(这是第一个观测)写入输出数据集;并继续执行下面步骤。

⑹又返回到DATA语句后的第一个可执行语句开始执行,并先把所有的变量置初值为缺失值.于是,第一个PUT语句的结果显示三个变量均为缺失值,而不是上一步的10、20、30。

⑺下一个INPUT语句从数据行中读入下一个观测,把变量X、Y赋值100、200。读取位置由运行时设置的一个数据指针指示。然后计算变量Z的值得300。于是PUT语句输出的X、Y、Z值分别为100、200、300。

5数据步入门

⑻然后,运行控制跳过CARDS语句到空语句,到数据步结尾,把第二个观测输出到数据集,

⑼再返回到数据步开头,把变量值赋初值为缺失值,所以第一个PUT语句输出的三个变量值为缺失值。

⑽然后运行到INPUT语句,应该读入下一个观测,但是查询数据指针发现已经读完了所有数据,所以本数据步结束,并把两个观测写入数据集WORK.A中。提交PROCPRINT;RUN;显示此数据集的内容如下:

OBSXYZ110203021002003006数据步入门

从这个例子可以看出SAS数据步程序和普通程序的一个重大区别:SAS数据步如果有数据输入,比如用INPUT、SET、MERGE、UPDATE、MODIFY等语句读入数据,则数据步中隐含了一个循环,即数据步程序执行到最后一个语句后,会返回到数据步内的第一个可执行语句开始继续执行,直到读入数据语句(INPUT、SET、MERGE、UPDATE、MODIFY等)读入了数据结束标志为止才停止执行数据步,并把读入的各个观测写入在DATA语句中指定的数据集内。如果没有数据输入而只是直接计算,则数据步程序不需要此隐含循环。数据步因为有这样一个隐含循环,所以也提供了用来查询某一步是第几次循环的特殊变量_N_,它的值为数据步循环计数值。7数据步入门

数据步流程图8数据步的编译和执行阶段编译阶段(CompilationPhase):在这个阶段,系统扫描每个语句检查它是否有语法错误。大部分语法错误导致系统无法对数据步作进一步的处理。在编译阶段将建立要创建的数据集的描述部分。执行阶段(ExecutionPhase):若数据步编译成功,就开始执行阶段。在这个阶段对源数据文件的每一条记录斗执行一次数据步,除非在程序中指明其它处理方式。在这个阶段建立数据集的数据部分。9数据步的编译阶段对程序进行词语和语法检查,检查它是否有语法错误;将程序转换为机器码,供执行阶段使用;建立工作部件输入缓冲器(InputBuffer);建立工作部件PDV(程序数据列)(ProgramDataVector);建立数据集中各个变量的三个必须的属性:Name,Type,Length;建立新建数据集的描述部分。10编译阶段(CompilationPhase):语法检查的主要内容:漏掉或错拼的关键词无效的变量名遗漏或错误的符号无效的选择项在内存中建立程序数据列PDV

用于建立SAS系统的数据集,一次只处理一个观测两个自动变量

_N_记录DATA步执行的次数

_ERROR_指示出错信息.0表示无错误,1表示有错误PDV的一般格式:|_N_|_ERROR_||11建立数据集的描述部分数据集名观测数和变量个数变量名及其属性12执行阶段(ExecutionPhase):创建数据集的数据部分执行顺序

PDV中外部为题初始化为缺省值输入每条记录至输入缓冲器,按INPUT语句读至PDV按数据步的其它语句处理后存入PDV在数据步结束时缺省地将PDV的内容作为一条观测写入新的数据集回到数据步的开始.使PDV中外部变量初始化为缺省值对源文件中每条记录都按上述步骤执行一次当对源文件最后一条记录执行结束后,数据步执行完成.

13编译阶段databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序数据列|_N_|_ERROR_|SEX|FATPCT||||||databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序数据列|_N_|_ERROR_|SEX|FATPCT|FAT|||||||数据集名:bodyfat

变量的个数(从PDV中可知)观测个数(执行到RUN时也已知)变量名及属性(从PDV中可知)14执行阶段databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序数据列|_N_|_ERROR_|SEX|FATPCT|FAT||1|0|M|13.3|.|初始缺省值databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序数据列|_N_|_ERROR_|SEX|FATPCT|FAT||1|0||.|.|databodyfat;inPUtsex$fatpct;fat=fatpct/100;cards;M13.3F22RUN;

程序数据列|_N_|_ERROR_|SEX|FATPCT|FAT||1|0|M

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论