第二章 SAS语言基础(1)

2019-01-10 12:43

第二章 SAS语言基础 (程序结构、数据类型、表达式与语句) 如果你曾经学过一门语言的话,就应该知道语言基础这里会讲些什么内容了。其实各种语言的语法套路是差不多的,无非就是数据类型、变量、常量、运算符、流程结构、函数以及输入输出等。 SAS程序的一般过程 数据步常用于创建数据集 原始 数据步 数据 DATA步 SAS表 SAS表 PROC过程步 报告 过程步常用于处理数据集(生成 报表、图形和实现数据分析功能)

1. 第一个SAS程序(SAS program) title \data temp; input group $ x @@; cards; A 54.0 B 50.2 A 56.6 B 53.8 A 57.3 A 51.2 … ;

proc ttest data=temp; var x; class group; run;

这个程序是用t检验来检验6-7岁的城市儿童与农村儿童的胸围是否不同。SAS程序中,每一行以分号(;)结尾的称为语句,语句是SAS程序最基本的单位,这跟其他语言是一致的。

SAS程序的层次是非常清楚的,因为它是模块化的。每一个SAS程序是有若干个语句组成,看起来可能非常复杂松散,而实际上SAS程序是两个模块化的结构构成即数据步和过程步,以及一些设置环境变量的全程语句。上面程序中,第一个语句是标题语句,也即是全程语句。data语句到第7行单独的分号被称为数据步,proc语句到run;语句被称为过程步。而且有些语句是专用于数据步的,比如input语句和cards语句;而有些语句是专用于过程步,如var语句和class语句;还有些语句是可以单独放在任何位置,称为全程语句。

1.1 程序结构:

数据步(Data step):用来创建和修改用于统计分析的数据集,实现基础的编程功能;每个data步以data语句开始,可以包含任意多个SAS程序语句。

过程步(Proc step):利用已创建的数据集完成特定的统计分析任务、结果输出及部分数据集整理功能。proc步以proc语句开始,数据集作为输入;其他语句给出用户想得到有关结果的更多信息的程序语句,这些语句依赖于用户调用的具体的过程。

数据步只要求以data步开始,没有其他限制;而proc步则更像一个模板,每一个过程有确定可用的语句,用户根据需要往上面填写。所以,说到SAS编程,大多的技巧和艺术都集中在数据步,过程步几乎没有任何的技巧可言,过

程步应用的好坏一方面取决于你前面数据处理的好坏,另一方面取决于用户的统计基础。

数据步的自循环(Data step's Built-in Loop):

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

data a ;

put x= y= z= ; input x y ; z=x+y ;

put x= y= z= ; cards ; 10 20 100 200 ;

run ;

运行后在LOG窗口显示如下记录: ……

X=. Y=. Z=. X=10 Y=20 Z=30 X=. Y=. Z=.

X=100 Y=200 Z=300 X=. Y=. Z=.

NOTE: The data set WORK.A has 2 observations and 3 variables.

这个程序的运行流程是这样的:

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

⑵第一个PUT语句要输出变量X、Y、Z的值,但它们还都没有定义,所以LOG窗口的结果显示为三个缺失值.

⑶下面是INPUT语句,它从CARDS语句后面的数据行中读取变量X的值10,变量Y的值20。

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

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

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

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

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

于是PUT语句输出的X、Y、Z值分别为100、200、300。 ⑻然后,运行控制跳过CARDS语句到空语句,到数据步结尾,把第二个观测输出到数据集。

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

⑽然后运行到INPUT语句,应该读入下一个观测,但是查询数据指针发现已经读完了所有数据,所以本数据步结束,并把两个观测写入数据集WORK.A中。

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

数据步流程图


第二章 SAS语言基础(1).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:校长许祥源在首都师范大学建校50周年庆祝大会上的讲话

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: