770 likes | 1.21k Views
SAS 软件介绍. 湖北工业大学理学院. 一、概述. SAS 系统全称为 Statistics Analysis System ,最早由北卡罗来纳大学的两位生物统计学研究生编制,并于 1976 年成立了 SAS 软件研究所,正式推出了 SAS 软件。 SAS 是用于决策支持的大型集成信息系统,但该软件系统最早的功能限于统计分析,至今,统计分析功能也仍是它的重要组成部分和核心功能。 SAS 现在的版本为 9.0 版,大小约为 1G 。经过多年的发展, SAS 已被全世界 120 多个国家和地区的近.
E N D
SAS软件介绍 湖北工业大学理学院
一、概述 • SAS系统全称为Statistics Analysis System,最早由北卡罗来纳大学的两位生物统计学研究生编制,并于1976年成立了SAS软件研究所,正式推出了SAS软件。SAS是用于决策支持的大型集成信息系统,但该软件系统最早的功能限于统计分析,至今,统计分析功能也仍是它的重要组成部分和核心功能。SAS现在的版本为9.0版,大小约为1G。经过多年的发展,SAS已被全世界120多个国家和地区的近
SAS系统是一个组合软件系统,它由多个功能模块组合而成,其基本部分是BASE SAS模块。BASE SAS模块是SAS系统的核心,承担着主要的数据管理任务,并管理用户使用环境,进行用户语言的处理,调用其他SAS模块和产品。也就是说,SAS系统的运行,首先必须启动BASE SAS模块,它除了本身所具有数据管理、程序设计及描述统计计算功能以外,还是SAS系统的中央调度室。它除可单独存在外,也可与其他产品或模块共同构成一个完整的系统。各模块的安装及更新都可通过其安装程序非常方便地进行。
SAS系统具有灵活的功能扩展接口和强大的功能模块,在BASE SAS的基础上,还可以增加如下不同的模块而增加不同的功能:SAS/STAT(统计分析模块)、SAS/GRAPH(绘图模块)、SAS/QC(质量控制模块)、SAS/ETS(经济计量学和时间序列分析模块)、SAS/OR(运筹学模块)、SAS/IML(交互式矩阵程序设计语言模块)、SAS/FSP(快速数据处理的交互式菜单系统模块)、SAS/AF(交互式全屏幕软件应用系统模块)等等。SAS有一个智能型绘图系统,不仅能绘各种统计图,还能绘出地图。SAS提供多个统计过程,每个过程均含有极丰富的任选项。用户还可以通过对数据集的一连串加工,实现更为复杂的统计分析。此外,SAS还提供了各类概率分析函数、分位数函数、样本统计函数和随机数生成函数,使用户能方便地实现特殊统计要求。
二、初识SAS • 安装SAS • 哪位要是连软件的安装和打开都要我啰嗦的话,我劝您还是买一套洪恩的《开天辟地》好好热热身吧。 • 不过,安装SAS时,应首先将系统时间改到2002年以前,安装完以后,再crack,然后将时间修改还原,切记!
启动后,出现如图 的SAS运行界面,术语称为"SAS工作空间(SAS Application WorkSpace)"。它象其它Windows应用程序一样,在一个主窗口内,包含若干个子窗口,并有菜单条、工具栏、状态栏等。 • SAS有三个最重要的子窗口:程序窗口(PROGRAM EDITOR)、运行记录窗口(LOG)、输出窗口(OUTPUT)。 • Program Editor的窗口(窗口标签为Editor)就是用来输入SAS语句的,编程操作的所有内容都是在该窗口内完成的,各位还是要跟它先多熟悉一下。
简单运行样例 • 假设我们有一个班学生的数学成绩和语文成绩,数学满分为100,语文满分为120,希望计算学生的平均分数(按百分制)并按此排名,可以在程序窗口输入此程序:
title '0401班学生成绩排名'; data c0401; input name $ 1-10 sex $ math chinese; avg = math*0.5 + chinese/120*100*0.5; cards; 李明 男 92 98 张红艺 女 89 106 王思明 男 86 90 张聪 男 98 109 刘颍 女 80 110 ; run; proc print;run; proc sort data=c0401; by descending avg; run; proc print;run;
实际上,上述程序是文本,完全可以在任何文本编辑工具中输入,比如Windows中的记事本,甚至Word也可用来输入这样包含中文的程序。输入后使用复制复制、粘贴命令将输入的程序粘贴到SAS系统程序窗口。(即在记事本中复制输入的程序,然后在SAS系统程序窗口中使用粘贴命令,把程序复制到SAS中)。 • 要运行此程序,只要用鼠标单击工具栏的提交(Submit)图标 ,或用Run菜单下的Submit命令,或者直接按下F8键,就可运行程序。如果选中某一段程序,然后进行调用,则系统只执行被选中的部分。
运行后,输出窗口出现如下结果: 0401班学生成绩排名 1 11:40 Saturday, November 10, 2004 Obs name sex math chinese avg 1 李明 男 92 98 86.8333 2 张红艺 女 89 106 88.6667 3 王思明 男 86 90 80.5000 4 张聪 男 98 109 94.4167 5 刘颍 女 80 110 85.8333 运行记录窗口则记录每段程序的运行情况、所用时间、生成数据保存情况。如果有错误还会用红色指示错误。
三、SAS程序的使用常识 从上面的例子程序可以看出SAS程序的一些特点。 • SAS程序的基本结构 SAS程序由语句组成,语句用分号结束。语句一般由特定的关键词开始,语句中可包含变量名、运算符等,它们以空格分隔。SAS对语句所占的行数无限制,一个语句可占多行,同样,多个语句也可占一行。
SAS程序的程序组成 SAS程序可以非常复杂,但其基本结构一般由数个完成单个动作的程序步和环境设置语句构成。而程序步分为两种,一种叫数据步(data step),一种叫过程步(proc step),分别以DATA语句和PROC语句开始。数据步和过程步由若干个语句组成,一般以RUN语句结束。前者用来创建和修改用于统计分析的数据集,后者则利用已创建的数据集完成特定的统计分析任务。比如下面的例子:
libname a 'd:\sysdata\'; data a.aaaa; input x @@; cards; 12345 ; procprint; var x; run; quit; • 第1句就是一个环境设置语句,其作用是设定一个逻辑库,逻辑库名称为a, • 第2~6句构成数据步,其功能是新建一个数据集,数据集名称为aaaa,并且输入数据, • 第7~9句构成过程步,其功能是将数据集aaaa中变量x的数值在output窗口中输出。
SAS程序的书写规则与程序注释 前面已经提到,SAS对程序的书写格式比较灵活,大小写一般不区分(字符串中要区分大小写),但我们仍提倡SAS程序与其它编程语言相似,采用缩进格式,使得源程序结构清楚,容易读懂。 SAS程序的程序注释有以下两种格式: 注释语句:以星号“*”开始,可占多行,以分号“;”结束。~ 注释段落:用“/*”和“*/”包括起来的任何字符,可占多行。 同样,我们提倡在程序中要有适当的注释,使程序的可读性强。
四、SAS程序的数据步 • 数据集(dataset)和库 SAS数据集(SAS Datasets)可以看作由若干行和若干列组成的表格,类似于一个矩阵,但各列可以取不同的类型值,比如整数值、浮点值、时间值、字符串、货币值等等。比如,前面的例子生成了一个名为C0401的数据集,它的逻辑形式如下表:
从上面看出,数据集要有名字,变量要有名字,所以SAS中对名字(数据集名、变量名、数据库名,等等)有约定:SAS名字由英文字母、数字、下划线组成,第一个字符必须是字母或下划线,名字最多用8个字符,大写字母和小写字母不区分。比如,name,abc,aBC,x1,year12,_NULL_等是合法的名字,且abc和aBC是同一个名字,而class-1(不能有减号)、a bit(不能有空格)、serial#(不能有特殊字符)、Documents (超长)等不是合法的名字。
逻辑库 SAS系统将所使用的文件以库的形式组织起来,而数据集则存放在一个库中,这个库就称为逻辑库。前面见到过的libname命令就用于指定库标记。其一般格式为: Libname 库名称 ‘文件夹位置’ 选项; • 例如 libname a 'd:\sysdata\'; data a.aaaa; input x @@; cards; 12345 ; procprint; var x; run; quit; 第一行就指定d:\sysdata\为逻辑库位置,其名称为a.
引用在逻辑库中数据集时要使用两级名称来指定,第一级为库名称,第二级为数据集名,中间用句点“.”隔开。即用 引用在逻辑库中数据集时要使用两级名称来指定,第一级为库名称,第二级为数据集名,中间用句点“.”隔开。即用 库名称.数据集名 的格式来引用该数据集。 仍然是上面的例子,第2~6句新建一个数据集,数据集名称为aaaa,就可用a.aaaa来引用该数据集。
数据步的基本结构 数据步均以DATA语句开始,用于创建和处理数据集。数据步中常用的语句如下表: 表2 数据步的常用语句
下面是几个例子。 • Data语句: Data abc; data work.abc data sasuser.abc; data a.abc; • INPUT语句: Input x y z; /*输入变量x,y,z*/ Input x1-x10; /*输入10个变量x1到x10*/ Input x$y@@; /*输入变量x,y,符号$指明x为字符变量,@@表示数据是连续读入*/
完整例子: libname a 'd:\sysdata\';/*设定逻辑库,库名为a*/ data a.aaaa; /*建立数据集,其名为aaaa*/ input x @@; /*输入变量x, @@表示数据是连续读入*/ cards; /*准备输入数据*/ 123.5 ; /*输入数据,注意有缺失值(缺失值用单独的小数点代表)*/
五、SAS程序的过程步 • 通俗地说,SAS程序的过程步就是用于实现各种统计分析功能的SAS命令,我们只需要按照其格式调用它们。过程步总是以一个proc语句开始,后面紧跟着过程步名。下表列出一些常用的过程步名及功能。
过程步的基本结构 SAS过程步的一般形式为: PROC 过程名 DATA=输入数据集 选项; 过程语句 / 选项; 过程语句 / 选项; …… RUN; 其中PROC语句的选项是可选的,用来规定过程运行的一些设置,如果有多个选项用空格分开。DATA=输入数据集也是可选的,如果缺省的话使用最近生成的数据集。过程步一般以RUN 语句结束。通常情况下,过程语句与数据步中的语句不同,数据步中的语句不能用在过程步中。过程步语句一般以某一个关键字开头,比如VAR、BY、TABLES、WEIGHT等,语句中有一些有关说明,如果有选择项的话要写在斜杠后。
SAS过程步常用语句 • 本小节简单介绍几个在SAS过程步中常见的语句,更具体的用法可以在以后实际用到时再仔细体会。 1.DATA选项 用于指明所需要处理的数据集,如果缺省的话使用最近生成的数据集。 2.VAR语句 VAR语句在很多过程中用来指定分析变量。在VAR后面给出变量列表: VAR 变量名1 变量名2 … 变量名n; 变量名列表可以使用省略的形式,如X1-X3, MATH--CHINESE等。例如: Proc print; var math chinese; run;
3.MODEL语句 MODEL语句在一些统计建模过程中用来指定模型的形式。其一般形式为 MODEL 因变量 = 自变量表 / 选项; 比如,将下列语句放在某一过程步中 model math=chinese; 则用语文成绩预测数学成绩。 4.BY语句和CLASS语句 5.OUTPUT语句 6.FREQ语句和WEIGHT语句 7.ID语句 8.WHERE语句 9.LABEL语句和FORMAT语句
六、SAS语言入门 • SAS是一种专用的数据处理、统计计算语言,但是它也包含一般的高级语言编程能力并扩充了许多数学、统计等方面的函数。由于SAS的数据处理功能非常强大,我们并不提倡用它来编复杂的程序,因此,我们只介绍SAS语言用来进行一般编程计算的功能。 • SAS语言的编程计算能力主要由SAS数据步提供(另外SAS还提供了一个SAS/IML模块可以进行向量、矩阵运算,读者有兴趣可以自己学习)。所以,下面给出的例子如果没有写DATA语句实际应该在例子前面加上DATA语句,在后面加上RUN语句才能运行。注意DATA语句总是以关键字DATA 开头,后面给出一个数据集名,就是本数据步要生成的数据集的名字,例如: • data tmp1; • 也可以省略数据集名,这时SAS自动生成一个临时数据集名。
1.赋值语句 在SAS中用赋值语句计算一个值并存放到变量中。 格式为 变量名 = 表达式; 例如: avg = (math + chinese/120*100)/2;/* 计算平均分数,赋值给变量avg*/ isfem = (sex='女'); /*先生成一个取值为0或1的值,性别为女时为1,否则为0*,然后赋值给变量isffem*/ newv = .; /*将变量赋了缺失值*/ 注意想试验上述语句要把它们放入数据步中,并且等号右边的表达式中的各变量应该是存在的,否则会得到缺失值结果。
2.输出语句 • SAS数据步的输出一般是数据集,用赋值语句计算的结果会自动写入数据集。SAS也提供了一个PUT语句,可以象其它语言程序的PRINT、WRITE(*,*)、printf等语句一样立即打印输出结果。PUT的基本语法很多,只举几例:
data; x=0.5; y=sin(x); put 'Sine function value of ' x 'is ' y; run; 结果将在运行记录窗口显示一行 Sine function value of 0.5 is 0.4794255386
在PUT语句中使用“变量名=”来指定输出项可以显示带有变量名的输出结果,比如把上程序中的PUT语句改为在PUT语句中使用“变量名=”来指定输出项可以显示带有变量名的输出结果,比如把上程序中的PUT语句改为 put x= y=; 则结果在LOG窗口显示为 X=0.5 Y=0.4794255386
分支结构 如果需要在某条件满足时执行某一操作,可以用 IF 条件 THEN 程序块 ELSE 程序块 的结构,其中Else语句及其后的程序块可以省略。需要注意的是,如果程序块只有一句,则可直接写出,否则应以DO开始,以END结束。
比如, if max(a)<20 then p=0; else p=1; 上述程序当max(a)<20时p=0,否则p=1。 下述程序则是复合的IF结构。 IF x>0 THEN DO; PUT ' X为正数'; x = 2*x; PUT x=; END; 注意SAS的分支结构的写法与其它语言有些不同,它不用ENDIF结束。
循环结构 SAS数据步可以使用循环结构,主要的是两种:计数DO循环和当型、直到型循环。 计数DO循环的写法是: DO 计数变量 = 起始值TO 结束值BY 步长; 循环体语句…… END; 在循环体中可以用LEAVE语句跳出循环,相当于C语言的break语句;用CONTINUE语句可以立即结束本轮循环并转入下一轮循环的判断与执行 .
当型循环的语法是: DO WHILE(循环继续条件); 循环体语句…… END; 程序先判断循环继续条件是否成立,成立时执行循环体语句,再判断循环继续条件,如此重复,直到循环继续条件不再成立。 直到型循环的写法是: DO UNTIL (循环退出条件); 循环体语句…… END; 程序先执行循环体,然后判断循环退出条件是否成立,成立则结束循环,否则继续。注意每轮循环都是先执行循环体再判断是否退出。
如: data; DO i = 1 TO 20 BY 2; j = i**3; put i 3. j 5.; END; run; 可以输出一个1,3,5,7,…,19的立方表。
七、SAS的基本统计分析功能 • 前面我们已经对SAS系统进行了简要的介绍,下面我们讲如何用SAS进行基本的统计检验、线性回归、方差分析等基本统计分析。我们既使用SAS语言编程,也使用SAS的菜单界面。 • 统计中常用的是对总体作正态性检验、均值检验、方差检验。下面我们就专门介绍这几个检验。
1. 正态性检验 在PROC UNIVARIATE语句中加上NORMAL选项就可以进行正态性检验。 • 例1 我们有两个班学生的考试成绩的数据,分数如下: • 31 67 73 45 75 41 99 64 95 71 97 74 77 28 95 74 63 52 79 40 84 86 63 69 21 4 45 86 52 18 44 74 74 64 91 63 4 31 85 21 60 35 25 31 58 82 70 64 10 75 78 88 96 51 86 74 50 64 15 88 27 37 80 69 25 74 97 44 47 88 79 63 3 50 67 75 • 问这次考试的分数是否服从正态分布?
要检验这些数据是否服从正态分布,只要用如下UNIVARIATE过程:要检验这些数据是否服从正态分布,只要用如下UNIVARIATE过程: • data stuscore; /*首先输入数据*/ • input score@@; • cards; • 31 67 73 45 75 41 99 64 95 71 97 74 • ……(其它数据略) • ; • PROCUNIVARIATE data=stuscore normal;/*正态分布检验*/ • VAR score; • RUN;
结果(部分)如下: Tests for Normality Test --Statistic--- -----p Value------ Shapiro-Wilk W 0.9477 Pr < W 0.0035 Kolmogorov-Smirnov D 0.142205 Pr > D <0.0100 Cramer-von Mises W-Sq 0.219175 Pr > W-Sq <0.0050 Anderson-Darling A-Sq 1.243435 Pr > A-Sq <0.0050 • 其中第一项W为Shapiro-Wilk正态性检验统计量,Pr<W为检验的显著性概率值(p值)。当N≤2000时正态性检验用Shapiro-Wilk统计量,N>2000时用Kolmogorov D统计量。我们可以看到,p值很小,所以在0.05水平(或0.10水平)下应拒绝零假设,即认为数据非正态。
归纳: (1)用于检验正态性的命令是: PROCUNIVARIATE data=数据集 normal;/*正态分布检验*/ VAR 要检验变量名; RUN; (2)用于检验正态性的重要指标是:Pr<W的显著性概率值(p值)。P>α(一般是0.05),则接受假设(即数据服从正态分布),否则拒绝假设(即数据不服从正态分布)。
2. 正态总体均值的假设检验 一、单个总体N(μ,σ2)均值μ的检验 1.σ已知时的μ检验(u检验法) 例2 某车间用一台包装机包装葡萄糖。包得的袋装糖重是一个随机变量,它服从正态分布。当机器正常时,其均值为0.5公斤,标准差为0.015公斤。某日开工后为检验包装机是否正常,随机地抽取它所包装的糖9袋,称得净重为(公斤): 0.497 0.506 0.518 0.524 0.498 0.511 0.520 0.515 0.512 问机器是否正常?
解 按题意需检验假设 • 操作步骤: • (1)首先输入数据,程序为 data u_weight; input weight@@; cards; 0.497 0.506 0.518 0.524 0.498 0.511 0.520 0.515 0.512 ; run; 运行上述程序。
(2)选择Solutions→Analysis→Analyst菜单, (3)选择File→Open By SAS Name→Work→u_weight, (4) 选择Statistics→Hypothesis, (5) 选择One-Sample z-test for a mean,出现图2,