首页 理论教育 快速掌握SAS词、语句和程序

快速掌握SAS词、语句和程序

时间:2023-08-10 理论教育 版权反馈
【摘要】:为了给SAS下达命令,需要用若干SAS词和其他符号组成一条SAS语句,每条SAS语句以英文分号结束,句首往往是关键词。若干条SAS语句组成一篇短文,即SAS程序,这样的程序通常称为SAS代码。SAS代码指示SAS系统完成所需任务。SAS语句后面的/**/中的内容说明该语句的功能,它对于SAS程序运行不起作用。这些SAS词、SAS选项和SAS语句的构造及如何使用称为SAS语法。

 快速掌握SAS词、语句和程序

为了给SAS下达命令,需要用若干SAS词和其他符号组成一条SAS语句,每条SAS语句以英文分号结束,句首往往是关键词。关键词规定语句的种类,每条SAS语句指示SAS系统完成局部任务(有时和别的语句联合起来指示SAS完成任务)。单独一个分号表示空语句。若干条SAS语句组成一篇短文,即SAS程序,这样的程序通常称为SAS代码。SAS代码指示SAS系统完成所需任务。以下先看一个SAS代码的例子。

例2.2 某公司为职员打印工资表,其职员各项原始工资收入如表2-1所示,根据当时的规定:收入超过1600元时,则超过部分的20%扣除作为所得税费。假如让你用SAS程序编出工资清单,请你编出SAS程序。(实际情况更复杂,为了便于掌握,本例做了简化,更复杂的例子参阅例6.1。)

解 这里编写下列SAS程序,为什么这样编写,将在3.1节详细介绍。SAS语句后面的/**/中的内容说明该语句的功能,它对于SAS程序运行不起作用。

提交此程序后SAS输出如下数表:

它包含数据集salary的全部内容:8个变量及其3次观测值。同时增加观测值序号(在第一列Obs中)。

由例2.2可见,该SAS程序由9条SAS语句(包括数据体)组成,8条SAS语句都以关键词开头,data、input、datalines、if、else、proc、run都是关键词,相应语句称为data语句、input语句、datalines语句、if语句、else语句、proc print语句、run语句(if语句和else语句也合称为if语句)。SAS程序一般以run语句结尾,程序编辑器中有了SAS程序,再提交程序(通常点击提交图标或按F3键),SAS系统就会执行run语句前的SAS语句所指示的任务。

必须注意SAS程序中的词只能是英文字符或用英文单引号括起来的中文字符,英文字母不分大小写标点符号只能是英文的,如果使用可接受中文字符的SAS系统(在安装SAS系统时可以选择)时,变量值的字符串可以是中文字符。

SAS语言是第四代计算机语言。每个SAS词的功能是由C语言完成的,每个SAS词等价于若干行C语言,读者不需要了解SAS词与C语言的关系,只要学会SAS语言的使用就够了。必要时,应当根据实际问题的需要查找文献来了解SAS语言,知道SAS语句的规律,知道如何运用SAS语句,使SAS语句完成所指定的任务。一般说来完成某个任务需要相应若干条必要语句,这若干条SAS语句缺少一条,SAS就不能完成指定的任务。另外还有些可选语句,这些语句使得任务完成得更完满。同样每条SAS语句中的词也分为必要词和可选词,可选词构成选项。这些SAS词、SAS选项和SAS语句的构造及如何使用称为SAS语法(syntax)。对于特定任务首先需要找出并学会必要语句和必要词,在此基础上补充可选语句和选项。为了便于掌握,对于本书中介绍的任务,为完成这些任务所用的程序中都使用尽可能少的必要语句,尽可能少的选项。

为了便于读者们掌握SAS的用法,在本书中尽量对所涉及例子都作出注释,解释每一语句起什么作用。本书把注释填在“/**/”中,这些注释在提交程序时不起作用,不参与计算、画图、制表和分析。一般说来,几条SAS语句联合起来指示SAS执行一项任务,注释单独一条SAS语句所起的作用并不一定确切(例如例2.2中建立SAS数据集时各语句的作用,按照夏坤庄等书的2.2.1小节的解释更准确),但是给每条SAS语句加注释可以防止因为遗忘而漏写SAS语句,或错误安排这些语句的次序,所以书中还是尽量对每一SAS语句给出注释,哪怕这些注释有些勉强。希望读者们通过阅读这些语句的注释,首先能模仿这些语句,以后能独立调用这些语句,经过较多时间的学习后能够自行学习其他相关可选SAS语句和选项。

一条SAS语句中可根据需要选用的词称为选项。例如proc print语句中常用两个选项:“data=”和“noobs”。当增加选项“data=”时,SAS就按照“=”后跟随的文件名,把该文件输出到Output窗口;当没有选项“data=”时,SAS就将最新生成的文件输出到Output窗口。当增加选项“noobs”时,SAS输出的数表中就不含变量值序号。

例2.3 如果有以下程序:

则提交程序后,SAS只输出临时数据集w1的内容,其中只有5个变量。

再次强调:SAS系统提交程序时不区分大小写英文字母。SAS系统只能理解英文系统的标点符号,对中文符号“;”“‘”等不能理解。如果你不小心用了这些符号,SAS程序就不能正常运行,就会终止运行,在Log窗口将显现红字。

例2.2的SAS程序中语句“proc print data=salary;”可以算是加工步,用于输出SAS数据集至Output窗口。它前面的语句是数据步,当然数据步的很多内容以后会详细介绍。经济金融管理类问题中数据步可以导入云数据集并从中选出所需数据,化为适用形式,因此数据步尤为重要。

SAS的数据步用于产生、导入、扩充、剪切和拼接SAS数据集(已定变量数据体)。其所用语句比较规范,最常用的语句有:data语句、input语句、datalines语句、infile语句、libname语句、merge语句、set语句(附有“first=”选项、“noobs=”选项)、赋值语句、空语句等。这些语句在数据步处理云数据和非云数据时都可以使用。为了利于初学者掌握,这儿仅以较简单数据为例说明它们的用法,读者们在遇到云数据时也能同样使用。但是对于较简单数据,可以直接将数据体拷贝在Editor窗口或直接键入数据体,从而形成SAS数据集(例如例2.2)。这时必须要有data语句、input语句和datalines语句。当变量很多或观测次数很多时,因为数据量太大,不便把数据拷贝在Editor窗口,更不能直接以键盘输入,这时可以使用infile语句、libname语句,“导入数据(Import Data)”窗口等方式读入数据形成SAS数据集。infile语句只读入待定变量数据体,不读入已定变量数据体,更直观地说,infile语句不读入变量,变量名要由使用者指定;使用“导入数据”窗口方式和libname语句可以导入已定变量数据体,不需使用者再另行输入变量名。

分析数据集、计算、写报告、输出和画图等称为加工步。一般说来加工步由一些过程组成,每个过程以“proc”开头。加工步各个过程的功能五花八门,因而不同过程的语句有较大差异。有些过程也用来对数据集修改扩充,例如proc sort、proc transports等过程是用来调整数据集的,并不作计算和分析。

加工步最常用的语句是proc语句和var语句,此外根据过程的需要附有其他语句。

proc语句用来调用过程,其一般形式是:

其功能是调用某过程来加工数据集ww。

var语句的一般形式是:

其功能是指定被加工的变量。当没有var语句时SAS加工数据集的全部变量。

例2.4 对于例2.2中的打印工资表的例子,如果改动程序最后2行,采用如下程序:

则只打印出如下结果:

(www.xing528.com)

前面已用过的print过程被广泛应用,一方面它可以在数据步使用,用来查阅数据集的内容,检查所构造数据集是否符合预期;另一方面它也在加工步使用,以便得到计算出的数据集内容。

注意:print过程的功能一般是将数据集的内容打印到Output窗口,而不是送到打印机,要想把数据送到打印机,可以使用print to过程。print过程有2条必要语句:proc print语句和var语句。proc print语句的一般形式是:

其功能是调用print过程。如果缺少“data=”选项就打印最新生成的数据集。如果具有选项“noobs”,则打印中不包含观测次数(变量obs的值)。

print过程还有3个可选语句:by语句、id语句和sum语句。

by语句的一般形式是:

其功能是对于该变量的每一个值,把该变量取该值的所有数据行打印成一张数表。

id语句的一般形式是:

其功能是打印数据集时列出该变量作为id变量。id语句在以后的许多过程中很有用。

sum语句的一般形式是:

其功能是打印数据集时,对于所指定的变量1,变量2,……把这些变量所有各行的和打印在该列下方。

例2.5 对于例2.2的打印工资表的例子,如果要求出3人所交付的所得税总和以及工人实际收入总和,应当增加sum语句。可采用如下程序:

提交程序后得到如下结果:

可见3人所交付的所得税和是160元,3人实际收入总和是4940元。

在print过程中使用by语句时,应当先把by变量排序。

例2.6 对于例2.2中的程序,为每一个人打印一张工资表。

解 应当用by语句,职员的姓名(mingzi)作为by变量,因此先要用sort过程将变量mingzi排序,于是采用如下程序:

提交上述程序后在Output窗口得到以下结果:

可见数据集salary被打印成三张表。以上结果是用接受中文字符的SAS计算出的,纯英文版SAS 9.1.3计算不出这样的结果。在许多过程中都要用到by语句。

SAS把其产品分为20多个模块,描述最基本内容的部分归于Base(基础部分),本书第1章至第4章都属于基础部分。为了解其中的SAS语句细节可以从“帮 助(Help)”→“SAS帮助与文档(SAS Help and Documents)”→“SAS Products”→“Base SAS”→“SAS Language Dictionary”→“Dictionary of Language Statements”进入帮助系统;为了解其中的SAS过程细节,可以从“帮助(help)”→“SAS帮助与文档(SAS Help and Documents)”→“SAS Products”→“Base SAS”→“SAS Procedures>Procedures”进入帮助系统。

练习题1 什么是SAS程序?它主要由哪两部分组成?

练习题2 什么是变量?什么是观测值?什么是数据行?什么是数据体?什么是已定变量数据体?举例说明。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈