欢迎来到天天文库
浏览记录
ID:57059193
大小:242.00 KB
页数:17页
时间:2020-07-30
《SAS课件――第07讲 SAS数据步编译与执行.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据步入门SAS语言是一种专用的数据管理、分析语言,它提供了很强的数据操作能力。这些数据操作能力表现在它可以容易地读入任意复杂格式的输入数据,并可以对输入的数据进行计算、子集选择、更新、合并、拆分等操作。另外,SAS系统还提供了用来访问其它数据库系统如Sybase、Oracle的接口,访问各种微机使用的数据库文件,如FoxPro、Excel的接口及向导,并提供了一个SQL过程来实现数据库查询语言SQL的功能。SAS语言直接、间接用于数据管理的语句很多,本章只能介绍最常用的一些语句。1数据步入门SAS语言的编程计算
2、功能主要在数据步实现。一个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.Ahas2observat
3、ionsand3variables.运行后在LOG窗口显示如下记录:这个程序的运行流程是这样的:⑴DATA语句标志了数据步开始,并指定了数据步结束时要生成的数据集名字为A(实际是WORK.A)。3数据步入门⑵第一个PUT语句要输出变量X、Y、Z的值,但它们还都没有定义,所以LOG窗口的结果显示为三个缺失值.⑶下面是INPUT语句,它从CARDS语句后面的数据行中读取变量X的值10,变量Y的值20。⑷下一个赋值语句计算变量Z的值得到30。因此,LOG窗口中的第二行输出显示三个变量的值分别为10、20、30。⑸从CA
4、RDS语句开始到空语句(;)的各行是非执行的,程序运行到RUN语句,发现这是本数据步的最后一个语句,按一般的程序语言的规则,程序到这里就应该结束了,程序中的第二行数据100200就不能被读入.4数据步入门但SAS是一个专用的数据处理语言,所以,这个程序运行到RUN语句后,先把读入的观测(这是第一个观测)写入输出数据集;并继续执行下面步骤。⑹又返回到DATA语句后的第一个可执行语句开始执行,并先把所有的变量置初值为缺失值.于是,第一个PUT语句的结果显示三个变量均为缺失值,而不是上一步的10、20、30。⑺下一个I
5、NPUT语句从数据行中读入下一个观测,把变量X、Y赋值100、200。读取位置由运行时设置的一个数据指针指示。然后计算变量Z的值得300。于是PUT语句输出的X、Y、Z值分别为100、200、300。5数据步入门⑻然后,运行控制跳过CARDS语句到空语句,到数据步结尾,把第二个观测输出到数据集,⑼再返回到数据步开头,把变量值赋初值为缺失值,所以第一个PUT语句输出的三个变量值为缺失值。⑽然后运行到INPUT语句,应该读入下一个观测,但是查询数据指针发现已经读完了所有数据,所以本数据步结束,并把两个观测写入数据集W
6、ORK.A中。提交PROCPRINT;RUN;显示此数据集的内容如下:OBSXYZ110203021002003006数据步入门从这个例子可以看出SAS数据步程序和普通程序的一个重大区别:SAS数据步如果有数据输入,比如用INPUT、SET、MERGE、UPDATE、MODIFY等语句读入数据,则数据步中隐含了一个循环,即数据步程序执行到最后一个语句后,会返回到数据步内的第一个可执行语句开始继续执行,直到读入数据语句(INPUT、SET、MERGE、UPDATE、MODIFY等)读入了数据结束标志为止才停止执行数
7、据步,并把读入的各个观测写入在DATA语句中指定的数据集内。如果没有数据输入而只是直接计算,则数据步程序不需要此隐含循环。数据步因为有这样一个隐含循环,所以也提供了用来查询某一步是第几次循环的特殊变量_N_,它的值为数据步循环计数值。7数据步入门数据步流程图8数据步的编译和执行阶段编译阶段(CompilationPhase):在这个阶段,系统扫描每个语句检查它是否有语法错误。大部分语法错误导致系统无法对数据步作进一步的处理。在编译阶段将建立要创建的数据集的描述部分。执行阶段(ExecutionPhase):若数据
8、步编译成功,就开始执行阶段。在这个阶段对源数据文件的每一条记录斗执行一次数据步,除非在程序中指明其它处理方式。在这个阶段建立数据集的数据部分。9数据步的编译阶段对程序进行词语和语法检查,检查它是否有语法错误;将程序转换为机器码,供执行阶段使用;建立工作部件输入缓冲器(InputBuffer);建立工作部件PDV(程序数据列)(ProgramDataVector);建立数据
此文档下载收益归作者所有