从本质上讲,SAS 是一种较为完善的第四代计算机语言。因此,人们对SAS 统计系统的学习,首先应从其核心内容——SAS 程序开始。然而,SAS 语言又与一般的计算机语言不同,它提供了大量的统计分析过程(模块),在进行数据的处理和分析时,用户无须知道某一统计分析方法的具体计算过程,只需在计算机中输入用户想进行分析的程序(如根据实验要求进行t 检验或是方差分析),计算机就可以根据用户的要求进行计算并输出计算结果。
(一)SAS 系统对数据的管理
在SAS 系统中,只有SAS 数据集才能被SAS 过程直接分析。SAS 数据集的结构和DBF数据库是完全一致的。SAS 数据集存储在被称为SAS 数据库的文件集中。在Windows 7 系统中,SAS 数据库与某一个文件夹相对应。因此,用户要为每一个数据库指定一个库名来识别该库。在SAS 系统中,指定库名用LIBNAME 命令来实现。其格式一般为:
LIBNAME 库标记‘文件夹位置’;
例如,要指定目录“D:\TEMPUSER”为库名A,则可用如下语句来实现:
LIBNAMEA‘D:\TEMPUSER’;
数据库可分为永久性数据库和临时性数据库。临时性数据库只有1 个,名为WORK,它每次启动SAS 系统后自动生成,关闭SAS 时数据库中的数据集将被自动删除。永久性数据库可以有很多个,用户可以用LIBNAME 语句指定永久性的库名,永久库中的文件被保留。但库名仍是临时的,每次启动SAS 系统后都要重新指定。
(二)SAS 程序的结构及书写要求
现以一个数据集例子来简述SAS 程序,见表1.2。
表1.2 某班级考试测试数据表
现有5 个变量(被试编号、性别、测试1、测试2 和作业等级),共搜集了6 个被试的数据。分析单位(本例中为被试编号)在SAS 术语中被称为“观测值”。SAS 采用“变量”表示每个观测值的信息,在SQL 术语中称为变量“列”(columns)或“域”(fields)。在编写SAS 程序之前,需要对每个变量赋予变量名,以便在计算或统计时将其区分开。SAS 变量名必须遵从以下规则:以字母或下画线“_”开头,不超过32 个字符长度(字母、下画线或数字),不能使用空格或特殊字符(如逗号、分号等)。表1.2 中5 个变量有效的命名为:
SUBJECT GENDER EXAM1 EXAM2 HW_GRADE
变量名最好便于记忆,易于区分。例如以上5 个变量,也可以命名为VAR1、VAR2、VAR3、VAR4 和VAR5,但是此时就需要记住VAR1 代表“被试编号”,VAR2 代表“性别”,以此类推,这就太过于烦琐,而且很容易混淆!
下面将上述例题进行SAS 程序编写,如图1.4 所示。
图1.4 SAS 程序编写
这是一个完整的SAS 程序,其功能是读入5 个变量,计算除变量GENDER 外各自的平均数、标准差、最大值、最小值等基本统计量。
1.SAS 程序书写
从上面程序还可以看出,SAS 功能的实现是通过由SAS 语句组成的程序来完成的,每一条语句指定SAS 完成特定的操作。
①SAS 程序的语句从上一个语句结束处开始,必须以一个分号结束。程序的末尾用“RUN;”语句结束。
②SAS 语句的第一个词一般为SAS 关键字,指定系统执行某一操作。语句的其他部分说明如何执行这一操作以及描述操作所需的信息。
③SAS 语句的输入格式相当自由。一个SAS 语句可以从一行的任何一列开始输入。一行中可以输入任意多条语句,一条语句也可以占用多行。语句中间可以空行。SAS 语句对字母的大小写不加区分,输入语句时可以用大写字母,也可以用小写字母,或大小写字母混用,但要求语句中的各项之间至少用一个空格分隔。
尽管如此,为了便于阅读和检查,建议开始学习时每行只写一个语句。
2.SAS 程序的结构
从上面的程序中可以看出,该程序包括了数据准备部分,以及DATA 步骤和PROC 步骤。一个完整的SAS 程序必须至少包括一个DATA 步骤和一个PROC 步骤。
3.SAS 程序步骤含义
前3 行组成了DATA 步骤。在本例中,DATA 步骤以单词DATA 开头,以DATALINES 结束。对于SAS 8.0 版之前版本采用的是CARDS 而不是DATALINES,新版本中CARDS 一样可行。行①告诉程序创建一个名为“TEST”的SAS 数据集。行②是一个INPUT 语句,给程序提交两方面信息:变量的名称和它们在数列中的位置。第一个变量SUBJECT,可以从数据列的第1 栏和第2 栏中找到;第二个变量是GENDER,这是一个字符变量,这种变量可以用字母或数字作为数据的值,当变量为字符变量时,就不能计算平均数;第三个变量是EXAM1,在第6 ~8栏,以此类推。DATALINES 语句③表示DATA 语句的结束,程序接下来该查找数据了。
下面6 行为真实数据,本例中,真实数据直接呈现在程序中。SAS 程序中,数据输入方式主要有直接输入(如本例)和外部文件读入两种方式。其中外部(纯文本)文件读入数据时,首先必须将数据建立纯文本的数据文件,然后运用INFILE 语句读入。纯文本一般采用“记事本文档”(扩展名为.TXT),例如在D:\USER 中已保存了名为DATA.TXT 的文件,其内容为图1.4 所示内容,则SAS 程序DATA 步骤可以改为:
DATA TEST;
INFILE ‘D:\USER\DATA.TEST’;
INPUT SUBJECT 1-2 GENDER 4 EXAM1 6-8 EXAM2 10-12 HW_GRADE 14;
该程序与上一个程序运行的结果是完全相同的。所不同之处在于该程序是从已经准备好的数据文件(DATA.TXT)中读入数据,而上一个程序则需要直接在程序书写时输入数据。之后将学习如何从外部文件读取数据,以及如何从外部程序,如Excel 或Access 中导入数据。
SAS 程序中变量数据一般采用的对齐方式为右对齐,虽然采用何种对齐方式并不影响SAS 的运行,但是可能影响数据在其他软件中的操作。
SAS 语句④是PROC 语句。PROC 表示“运行程序”,紧接其后指定运行哪一个过程。此处运行的是MEANS 过程。在过程MEANS 之后是选项DATA=,如果省略掉DATA=TEST,程序会自动运行最近创建的SAS 数据集,本例中只有一个TEST 数据集,因此可以省略。若用户所书写的SAS 程序等级越高,需要处理的数据集就越多,为了保证程序总能运行正确的数据集,建议将DATA=选项写在每一个PROC 过程中。
MEANS 过程能够计算指定变量的平均数。SAS 在显示管理系统运行时,语句⑤“RUN;”非常重要,它将告诉系统后面没有其他语句可以进行计算。如果一行有多个PROC 语句,只需要在程序末尾加上一个“RUN;”语句,不过建议在每一个PROC 过程后都加上“RUN;”语句,因为这是一种标准的格式。
PROC MEANS 可以计算一些其他的统计量,如方差和标准误,同时用户也可以指定需要的统计量。如:
PROC MEANS DATA=TEST N MEAN STD STDERR MAXDEC=1;
VAR EXAM 1 EXAM2;
RUN;
该程序可以得到EXAM1 和EXAM2 这两个变量的样本容量(N)、平均数(MEAN)、标准差(STD)和标准误(STDERR)。另外,统计值会自动取舍到小数点后一位(MAXDEC=1)。(www.xing528.com)
4.SAS 程序扩展
上述SAS 程序提供了一些简单有用的信息,在此基础上,用户可以进一步根据试验目的进行程序编辑。深度挖掘的数据包括:用两次测验(EXAM1 和EXAM2)的平均值来计算期末成绩;将期末成绩赋予字符等级作为期末等级;将学生按照ID 排序,显示其测验成绩、期末等级和家庭作业等级;计算测验和期末成绩的班级平均分,并计算性别和家庭作业等级的频数。处理完这些数据后,用户对SAS 程序的理解就可以达到处理动物科学试验中数据的水平。
如图1.5 所示,从DATA EXAMPLE 到DATALINES 的语句组成了DATA 步骤,语句(1)是创建名为“EXAMPLE”的数据集的指令,语句(2)是INPUT 语句,此语句与之前有所不同:变量名后面没有栏位数了,不影响计算结果,但字符变量名后面仍需要加“ ”符号。资料中,某些观察值缺失,则在SAS 系统中,一般用符号“.”来表示缺失数据,这里需要注意的是,缺失数据(.)与观察值为“0”的意义是完全不同的。假设本例中被试10(第一个被试单位)没有参加第一次测试,如果这样呈列数据:10 M 84 A。EXAM1 成绩学时,系统就会将84 读取成EXAM1 的成绩,然后将字母A 读取成EXAM2 的成绩,由于EXAM2 是数字变量,这样子就会造成程序错误,因此需要加入(.)来填补缺失数据,正确呈现这一行数据的方法是:10 M.84 A。
图1.5 SAS 扩展程序编辑
语句(3)是将EXAM1 和EXAM2 的平均值赋予一个新变量“FINAL”的语句。本例中FINAL 通过将两次测验分数相加,再除以2 得到。用符号“ +”表示加法,符号“ -”表示减法,符号“∗”表示乘法,符号“/”表示除法,符号“∗∗”表示平方。与手写代数式一样,SAS 的计算也遵循数学运算法则的等级顺序。
IF 语句(4)和ELSE IF 语句(5)是用来将期末成绩转换为字母等级的逻辑语句。当IF 语句的情况为真,则执行THEN 语句的指令。本例使用的逻辑比较运算符号GE(大于或等于)和LT(小于)。因此,如果FINAL 的分数大于或等于0 并且小于65 时,字母等级为“F”。ELSE 语句只有在IF 语句不为真时执行。例如,如果FINAL 的分数为“66”,则IF 语句不为真,因此检验ELSE IF 语句(5),指导某一个语句为真,GRADE 被赋予相应的字母等级,其余的ELSE IF 语句将被跳过。程序编写参照计算机程序VB 或C 语言进行。
SAS 程序逻辑运算符号及其意义见表1.3。
表1.3 SAS 程序逻辑运算符号及其意义
DATALINES 语句(6)表明DATA 步骤完成,接下来的几行是真实数据,真实数据以“;”符号结束。紧接着数据的是一系列有着各种功能的PROC 过程,它们将基于SAS 数据集进行计算。①按被试成绩排序的成绩列表,首先进行的SORT PROCEDURE 过程(7)、(8)、(9)。行(7)表示将对数据集进行排序,行(8)表示此次排序将基于SUBJECT 的被试标号。PRINT 语句(10)要求列出数据,该语句用于列出SAS 数据集中的所有数据,在PROC PRINT 语句之后有3 个补充语句:TITLE、ID、VAR(补充语句出现顺序不影响结果),TITLE 之后的文字放在双引号(或单引号)内,将在每个SAS 结果输出页的顶端呈现,ID 变量的作用是让程序把变量SUBJECT 打印在结果输出报告的第一栏,VAR 的作用是指明除了ID 变量外,用户还想在结果中输出报告中呈现哪些变量。
MEANS 语句(11)与之前例子相同,最后,FREQ 语句(12)对变量GENDER、HW_GRADE和GRADE 进行频数计算,即男性和女性的数量,A、B、C 等级的数量,以及每种类别的百分比。图1.5 中SAS 程序运行结果如图1.6 所示。
图1.6 SAS 程序运行结果
结果输出的第一页(页码在每页最右边)是将数据集排序后的PROC 结果输出。每一栏都标记了变量名。采用ID 语句将SUBJECT 作为ID 变量,因此最左边一栏显示的是SUBJECT 的数字,如果不指定ID 变量,将显示OBS 变量栏。
第二页列出了VAR 语句中的变量,并进行了指定的统计分析(N、平均数、标准差、标准误),所有的结果保留一位小数。
第三页是PROC FREQ 的结果。本页的顶端都呈现了PROC MEANS 过程中指定的标题“Descriptive Statistics”。这部分提供了频数以及百分比。
5.SAS 程序运算结果及程序的保存
当编写的程序获得正确的运行结果后,可将其保存起来供下一步分析。保存的方法为:在结果输出窗口,单击“文件”下的“保存”或“另存为”选项,然后根据系统提示给定相应的文件夹及文件名即可实现输出结果的保存。这与其他文档编辑软件的操作完全一致。与此类似,也可以将所编写的程序保存起来,供下次调用或者修改。保存方法与结果保存方法相同,只需要将光标移至程序编辑窗口将程序按前面的方法调回即可。
6.常用的SAS 程序运行函数
(1)算术函数
绝对值函数:ABS(x),表示对x 取绝对值
平方根函数:SQRT(x),表示对x 取平方根
余数函数:MOD(x,y),表示x/y 的余数
符号函数:SIGN(x),表示x 的正负,SIGN(x)=1,表示x >0;SIGE(x)= -1,表示x <0;SIGN(x)=0,表示x=0。
(2)数学函数
幂函数:EXP(x),表示求ex的值
自然对数函数:LOG(x),表示求lnx的值
常用对数函数:LOG8(x),表示求的值
(3)三角函数
正弦函数:SIN(x),表示求x 的正弦值
余弦函数:COS(x),表示求x 的余弦值
正切函数:TAN(x),表示求x 的正切值
反正弦函数:ARSIN(x),表示求x 的反正弦函数值
反余弦函数:ARCOS(x),表示求x 的反余弦函数值
反正切函数:ATAN(x),表示求x 的反正切函数值
(4)截取函数
取整函数:INT(x),表示对x 取整数部分
舍入函数:ROUND(x,n),按舍入单位n(n >0)对x 进行四舍五入计算,如ROUND(123.127,0.01)=123.13;ROUND(123.127,10)=120。
(5)样本统计函数
在SAS 系统中,常用的样本统计函数主要有:MEAN(平均数)、SUM(求和)、VAR(方差)、STD(标准差)、CV(变异系数)、RANGR(极差)、MAX(最大值)、MIN(最小值)、STDERR(标准误)、N(非缺省值的个数)、NMISS(缺省值的个数)、CSS(矫正平方和)、USS(未矫正平方和)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。