为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

统计分析系统SAS应用(2011短学期)

2011-09-09 38页 doc 309KB 21阅读

用户头像

is_177972

暂无简介

举报
统计分析系统SAS应用(2011短学期)统计软件教程 统计分析系统SAS应用 统计学是研究如何收集数据、分析数据并进行推断的学科。统计学的应用必然要涉及数据的收集、存贮、整理,以及各种统计方法的实现,这些都要靠统计软件的帮助来完成。 从电子计算机出现至今,统计软件已经有了长足的发展。一方面经典的统计方法都已被实现到统计软件中,另一方面,帮助统计学家实现新的统计方法的软件也极大地推动了新的统计计算方法的研究与开发。 SAS系统是一个集大型数据库管理、统计分析、报表图形、信息系统开发等多种强大功能为一体的大型软件系统,是国际公认的优秀统计分析软件. 1、​ 基本统计概念...
统计分析系统SAS应用(2011短学期)
统计软件教程 统计系统SAS应用 统计学是研究如何收集数据、分析数据并进行推断的学科。统计学的应用必然要涉及数据的收集、存贮、整理,以及各种统计方法的实现,这些都要靠统计软件的帮助来完成。 从电子计算机出现至今,统计软件已经有了长足的发展。一方面经典的统计方法都已被实现到统计软件中,另一方面,帮助统计学家实现新的统计方法的软件也极大地推动了新的统计计算方法的研究与开发。 SAS系统是一个集大型数据库管理、统计分析、报表图形、信息系统开发等多种强大功能为一体的大型软件系统,是国际公认的优秀统计分析软件. 1、​ 基本统计概念 1、​ 总体和样本 总体:一些值的集合,如每个人的身高。 样本:抽样的结果。 样本: x1,x2,x3,……xn 样本均值: 样本方差: 2、​ 正态分布: N(μ,σ2) 若μ=0,σ2=1 标准正态分布 N(0, 1) 3、​ 正态总体均值和方差的检验 均值的检验 假设 H0 :μ=μ0 H1 :μ≠μ0 步骤:提出假设 H0 :μ=μ0 H1 :μ≠μ0 构造检验统计量 在H0下服从 t(n-1) 分布 由样本计算T值,在H0成立时 |T| 应该很小 利用T值计算p值 推断:当p<α (一般取α=0.05) 则 否定H0 当p>α 则 H0相容 方差的检验 假设 H0 :σ2 =σ02 H1 : σ2 ≠σ02 构造检验统计量 在H0下服从 χ2(n-1) 分布 …… 2、​ SAS系统介绍 SAS运行界面 启动后,出的SAS运行界面,术语称为“SAS工作空间(SAS Application WorkSpace )”。它象其它Windows应用程序一样,在一个主窗口内,包含若干个子窗口,并有菜单条、工具栏、状态栏等。 SAS有三个最重要的子窗口:程序窗口(PROGRAM EDITOR)、运行记录窗口(LOG)、输出窗口(OUTPUT)。 程序窗口的使用类似于Windows中的记事本程序,可以在其中编辑文本文件,主要是编辑SAS 程序。 运行记录窗口记录程序的运行情况,运行是成功还是出错,运行所用时间,如果出错,错在什么地方。运行记录窗口中以红色显示的是错误信息。 输出窗口显示SAS程序的文本型输出(图形输出单独有一个GRAPHICS窗口)。输出分页显示。 要把光标移动到某一窗口,可以用主菜单中的Window菜单选择要显示的窗口。用功能键F5 可以切换到程序窗口,F6可以到运行记录窗口,F7可以到输出窗口。 SAS主窗口标题栏下是主菜单。其中,File(文件)菜单主要是有关SAS文件调入、保存及打印的功能。Edit (编辑)菜单用于窗口的编辑(如清空、复制、剪切、粘贴、查找、替换)。Locals(局部)菜单与当前正在进行的操作有关,如果你正在程序窗口中编辑程序,则Locals菜单有提交运行、调回修改等项,如果在运行记录窗口或输出窗口则Locals菜单项根本不出现。Globals 菜单内容比较复杂,它可以打开被关闭的程序窗口、运行记录窗口、输出窗口、图形窗口,可以进入SAS提供的各个独立模块。   Submit - 提交编辑窗口中的程序   New - 清空编辑窗口   Open - 打开文件到编辑窗口。用户指定一个文件调入到编辑窗口内。这个文件从此与编辑窗口相关联,以后的存盘操作将自动存入这个文件。   Save - 存盘,保存编辑窗口内容,注意如果此窗口已经与一个文件相联系的话此功能将覆盖文件的原有内容而不提示。   Print - 打印当前窗口内容   Print preview -打印预览。   Cut - 剪切选定文本。   Copy - 复制选定文本。   Paste - 粘贴。注意这些操作是对Windows 剪贴板进行的,可以用来与其它Windows应用程序交换文本、数据等。剪切或复制到剪贴板的内容可以被其它应用程序粘贴,其它应用程序放到剪贴板的内容也可以粘贴到SAS的编辑窗口中。   Undo - 撤销刚才的编辑操作。   DOS prompt - 临时进入DOS。   Browse - 打开WWW浏览器并进入SAS公司的主页 www.sas.com。   Directories - 进入Directory(目录)窗口,可以浏览各SAS数据库的内容,可以浏览数据库中的数据集、SAS目录的内容。   SAS/ASSIST - 启动SAS的菜单驱动界面SAS/ASSIST 。   Help - 启动Windows的帮助系统进入SAS 的帮助。 简单运行样例 假设我们有一个班学生的数学成绩和语文成绩,数学满分为100,语文满分为120,希望计算学生的平均分数(按百分制)并按此排名,可以在程序窗口输入此程序: title '95级1班学生成绩排名'; data c9501; input name $ 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=c9501; by descending avg; run; proc print;run; 实际上,输入这样包含中文的程序最好不是在SAS程序窗口直接输入,因为SAS目前对中文输入的处理还不够完善,好的办法是打开一个其它的编辑程序如Windows中的记事本(在Win95 中用开始菜单中的“程序 | 附件 | 记事本”启动),在记事本中复制输入的程序,然后到SAS 系统程序窗口中使用粘贴命令(用Edit菜单的Paste或工具栏上的粘贴图标),把程序复制到SAS 中。也可以在记事本中把编好的程序存盘,然后在SAS程序窗口用File菜单的Open命令打开保存好的程序文件。 要运行此程序,只要用鼠标单击工具栏的提交图标 ,或用Locals菜单的Submit命令。  在程序窗口用“Locals | Recall text”菜单或按F4功能键可以调回程序修改。 从上面的例子程序可以看出SAS程序的一些特点。SAS程序由 语句组成,语句用分号结束。SAS程序中大小写一般不区分(字符串中要区分大小写)。SAS程序中的空格、空行一般可以任意放置,这样我们可以安排适当的缩进格式使得源程序结构清楚易读。SAS程序由两种“步”构成,一种叫 数据步(data step),一种叫 过程步(proc step),分别以DATA语句和PROC语句开始。数据步和过程步由若干个语句组成,一般以RUN语句结束。 2.1 SAS基本概念 介绍一些SAS特有的概念,其中最重要的是数据集。 SAS数据集 SAS数据集(SAS Datasets)可以看作由若干行和若干列组成的表格,类似于一个矩阵,但各列可以取不同的类型值,比如整数值、浮点值、时间值、字符串、货币值等等。SAS 数据集存放在以特殊格式存放的二进制文件中,我们用一个SAS中的逻辑名来使用SAS数据集而不需关心它到底如何存储在磁盘上。比如例子生成了一个名为C9501的数据集, 数据集的每一行叫做一个观测(Observation),每列叫做一个变量(Variable)。SAS数据集等价于关系数据库系统中的一个表,实际上一个SAS数据集有时也称作一张表。在数据库术语中一个观测称作一个记录,一个变量称作一个域。在C9501数据集中有5个观测,分别代表5个学生的情况,而每个学生有5个数据,分别为姓名、性别、数学成绩、语文成绩、平均分,所以此数据集有5个变量。 从上面看出,数据集要有名字,变量要有名字,所以SAS中对 名字(数据集名、变量名、数据库名,等等)有约定:SAS名字由英文字母、数字、下划线组成,第一个字符必须是字母或下划线,名字最多用8个字符,大写字母和小写字母不区分。比如,name,abc,aBC,x1,year12,_NULL_等是合法的名字,且abc和aBC是同一个名字,而class-1(不能有减号)、a bit(不能有空格)、serial#(不能有特殊字符)、Documents (超长)等不是合法的名字。 SAS数据库 SAS数据集是各种特殊格式的 SAS文件中最重要的一种。另一种重要的SAS文件是 SAS目录(Catalog),用来保存各种不能表示成行列结构表格形式的数据,比如系统设置、图象、声音等。多个SAS文件可以放在一起,称为一个 SAS数据库(Library)。数据库有一个库名(Libname),其命名遵循上述SAS名字命名原则。在MS DOS/Windows环境中,一个SAS数据库实际是磁盘上的一个子目录(特殊情况下一个数据库可以由几个子目录组成)。为了把库名和子目录联系起来,使用LIBNAME语句。比如,我们在C:\s子目录中保存了几个SAS数据集,可以用如下语句把库名MYLIB与子目录C:\s 联系起来: libname mylib "c:\s"; 有三个预定义的SAS数据库:WORK、SASUSER、SASHELP。其中,WORK数据库叫做 临时库,存放在其中的SAS文件叫 临时文件,这些临时文件当退出SAS系统时会被自动删除。SASUSER库保存与用户个人设置有关的文件,它是永久的,即退出SAS时文件不会被删除。SASHELP库保存与SAS帮助系统、例子有关的文件,是永久的。 从上面看出,SAS文件分为 临时文件和 永久文件:临时文件在退出SAS系统时自动被删除,永久文件在退出SAS系统时不自动被删除。所以,我们把作为中间结果使用的数据集或练习用的数据集作为临时数据集保存,而需要以后再用的数据集则可以保存为永久数据集。临时数据集和永久数据集的区别是:临时数据集可以用 单水平名,即只有数据集名,比如C9501,而永久数据集名由两部分组成,前一部分是它的库名,后一部分才是数据集名,两部分中间用小数点连接,比如放在MYLIB库(即"C:\Y1995" 子目录)中的数据集TEACH必须用MYLIB.TEACH表示。这样指定的数据集名在生成时可以放到由库名指定的子目录中,在读取时可以到指定的子目录读取,并且不会被自动删除。 临时数据集除用单水平名外 ,也可以用库名为WORK的两水平名,如WORK.C9501和C9501 是一样的。 要生成永久数据集,只要在指定要生成的数据集名时使用两水平名且库名已有定义,比如,要把上面的C9501数据集在生成时就放到"C:\s"子目录中,可以用如下语句: libname mylib "c:\s"; data mylib.c9501; …… proc sort data=mylib.c9501; …… 说明:在SAS中,统计假设检验的结果一般用检验的p值给出。这与我们习惯的做法稍有不同,以单正态总体的均值检验为例。假设我们要检验中学生的身高是否均值为零(这当然不可能,我们为简单起见用这种假设),设总体服从 ,要检验的零假设为 ,水平0.05,统计量使用t统计量 ,一般我们用的假设检验方法定否定域为W={|t|>C} ,其中C为n-1自由度t分布的双侧0.05分位数(Pr{|t|>C}=0.05),当用样本算出的t统计量的值(如t=A)落入否定域时(|A|>C)否定零假设。在SAS中不需要这样指定否定域,它可以先用样本计算出t统计量的值(A),如果这个A绝对值很大就否定零假设,t统计量绝对值值是不是很大可以用这样一个p=Pr{|t|>|A|}来衡量,p是一个0到1之间的数值,显然|A| 越大,p越小。p<0.05与|A|>C是等价的。所以,如果p小于0.05,就否定零假设,称检验结果是显著的。否则不否定零假设。 2.2 SAS语言与数据管理 SAS系统强大的数据管理能力、计算能力、分析能力依赖于作为其基础的SAS语言。SAS语言是一个专用的数据管理与分析语言,它的数据管理功能类似于数据库语言(如FoxPro),但又添加了一般高级程序语言的许多成分(如分支、循环、数组),以及专用于数据管理、统计计算的函数。SAS系统的数据管理、报表、图形、统计分析等功能都可以用SAS语言程序来调用,只要指定要完成的任务就可以由SAS系统按照预先设计好的程序去进行,所以SAS 语言和FoxPro等一样是一种第四代语言。 介绍SAS语言的基本成分与规则,SAS语言如何用来管理数据,SAS语言作为一个统计计算语言的用法,以及SAS过程使用的初步知识。 SAS语言构成 SAS语言程序由数据步和过程步组成。数据步用来生成数据集、计算、整理数据,过程步用来对数据进行分析、。SAS语言的基本单位是语句,每个SAS语句一般由一个关键字(如DATA,PROC,INPUT,CARDS,BY)开头,包含SAS名字、特殊字符、运算符等,以分号结束。 SAS关键字是用于SAS语句开头的特殊单词,SAS语句除了赋值、累加、注释、空语句以外都以关键字开头。SAS名字在SAS程序中标识各种SAS成分,如变量、数据集、数据库,等等。SAS 名字由1到8个字母、数字、下划线组成,第一个字符必须是字母或下划线。SAS关键字和SAS 名字都不分大小写。 SAS表达式 SAS数据步程序中的计算用表达式完成。表达式把常量、变量、函数调用用运算符、括号连接起来得到一个计算结果。 SAS常量主要有数值型、字符型两种,并且还提供了用于表达日期、时间的数据类型。例如 数值型:12,-7.5,2.5E-10 字符型:'Beijing',"Li Ming","李明" 日期型:'13JUL1998'd 时间型:'14:20't 日期时间型:'13JUL1998:14:20:32'dt 数值型常数可以用整数、定点实数、科学计数法实数表示。字符型常数为两边用单撇号或两边用双撇号包围的若干字符。日期型常数是在表示日期的字符串后加一个字母d(大小写均可),中间没有空格。时间型常数是在表示时间的字符串后加一个字母t。日期时间型常数在表示日期时间的字符串后加字母dt。 因为SAS是一种数据处理语言,而实际数据中经常会遇到缺失值,比如没有观测到数值,被访问人不肯回答,等等。SAS中用一个单独的小数点来表示缺失值常量。 SAS程序规则 SAS程序由语句构成。每个语句以分号结尾(最常见的SAS编程错误就是丢失分号)。因为分号作为语句结束标志,所以SAS语句不需要单独占一行,一个语句可以写到多行(不需任何续行标志),也可以在一行连续写几个语句。SAS语言中只要允许用一个空格的地方就可以加入任意多个空白(空格、制表符、回车),允许用空格的地方是名字周围、运算符周围。比如,程序 proc print data=c9501; by avg; run; 和 proc print data=c9501;by avg;run; 是等效的。另外,SAS关键字和名字大小写不分,但字符型数据值要区分大小写,比如"Beijing" 和"BEIJING"被认为是不同的数据值。 在SAS程序中可以加入注释,注释使用C语言语法,用/*和*/在两端界定注释,这种注释可以出现在任何允许加入空格的位置,可以占多行。我们一般只把注释单独占一行或若干行,不把注释与程序代码放在同一行。注释的另一个作用是把某些代码暂时屏蔽使其不能运行。下面是一个注释的例子: /* 生成95级1班考试成绩的数据集 */ data c9501; …… SAS程序包括数据步和过程步两种结构,每一个步是一段相对完整的可以单独运行的程序。数据步用来生成、整理数据和自编程计算,过程步调用SAS已编好的处理过程对数据进行处理。自己用SAS编程序进行计算主要在数据步中进行。 SAS数据步以DATA语句开头,以RUN语句结尾。DATA步中可以使用INPUT、CARDS、INFILE 、SET、MERGE等语句指定数据来源输入数据,也可以用赋值、分支、循环等编程结构直接生成数据或对输入的数据进行修改。 SAS语言的编程计算能力主要由SAS数据步提供(另外SAS还提供了一个SAS/IML模块可以进行向量、矩阵运算,读者有兴趣可以自己学习)。所以,下面给出的例子如果没有写DATA语句实际应该在例子前面加上DATA语句,在后面加上RUN语句才能运行。DATA语句以关键字DATA 开头,后面给出一个数据集名,这是本数据步要生成的数据集的名字,例如: data c9501; input name $ sex $ math chinese; avg = math*0.5 + chinese/120*100*0.5; cards; 李明 男 92 98 张红艺 女 89 106 王思明 男 86 90 张聪 男 98 109 刘颍 女 80 110 ; run; SAS语言的数据管理功能 SAS语言直接、间接用于数据管理的语句很多,这里只能拣最常用的介绍。 用INPUT语句输入数据 在数据步中输入数据可以从原始数据输入,也可以从已有数据集输入。从原始数据输入要使用INPUT语句来指定输入的变量和格式。数据行写在CARDS语句和一个只有一个顶头的分号的行之间。 最简单的INPUT语句使用自由格式:按顺序列出每个观测的各个变量名,中间用空格分开。变量如果是字符型的需要在变量名后面加一个$符号,$符与变量名可以直接相连也可以隔一个空格。例如: data c9501; input name $ sex $ math chinese; cards; 李明 男 92 98 张红艺 女 89 106 王思明 男 86 90 张聪 男 98 109 刘颍 女 80 110 ; run; 注意这个例子的数据有五个观测,四个变量,每行数据的各变量之间用空格分隔。为输入这些数据,INPUT语句中依次列出了四个变量名,并在字符型变量NAME和SEX后加了$符。要生成一个数据集这是最简单的写法。 使用自由格式也有一些限制条件,如果不满足这些条件时需要改用其它输入格式: 数据每行为一个观测,各数据值之间用空格或制表符分隔 无论是字符型还是数值型缺失数据都必须用小数点表示 字符型数据长度不能超过8个字符,不允许完全是空白,中间不允许有空白,开头和结尾如果有空白将被忽略 在INPUT语句中必须列出观测中的每一项数据对应的变量名而不能省略中间的某一个 在满足以上条件时就可以使用自由格式,它也有明显的优点:使用简单;输入数据时不必上下对齐;不需要知道每个变量的具体列数而只需知道它的次序。 如果各数据行的各个数据项是上下对齐的,还可以使用INPUT语句的列方式。这时,除了在INPUT关键字后面列出变量名外,还需要在每个变量名(及$符)后面列出该变量在数据行中所占据的列起始位置与结束位置,比如上面的例子可以改写成: data c9501; input name $ 1-10 sex $ 11-13 math 14-16 chinese 18-20; cards; 李明 男 92 98 张红艺 女 89 106 王思明 男 86 90 张聪 男 98 109 刘颍 女 80 110 ; run; 使用列方式时一定要正确数出每一项所占的位置。列方式有如下特点: 数据行各项上下对齐 各项之间可以没有任何分隔,连续写在一起 字符型数据长度可以超过8个字符,中间可以有空格,头尾的空格仍将被忽略。 不论字符型变量还是数值型变量如果指定列位置都是空白则输入值为缺失值。小数点仍表示数值型和字符型变量的缺失值。 可以只输入数据行中的某些项而忽略其它项。 列方式不要求数据项之间分开,所以经常用来输入紧缩格式的数据。比如,我们要输入一批身份证号码,但只输入其中的出生年、月、日信息,就可以用如下程序: data pids; input year 7-8 mon 9-10 day 11-12; cards; 110103751209223 110101690215005 ; run; 读入外部数据 对于小量的数据,用CARDS语句和空语句把数据夹在中间放在数据步程序中就可以用INPUT 语句输入数据。如果数据量很大(有时可以有上亿行、几千列),直接把数据放在程序中不利于程序和数据的维护。这时,一种办法是把原始数据放在一个普通的文本格式的文件中,然后用INFILE语句指定输入文件名。例如,我们可以把1.1.3中的数据行单独生成一个文本文件stud.txt,假设放在了C:\SAS中,可以用如下程序读入文件中的数据并生成数据集: data c9501; infile 'c:\sas\stud.txt'; input name $ 1-10 sex $ math chinese; run; proc print;run; 注意INFILE语句要写在INPUT语句之前,有INFILE语句就不再有CARDS语句和空语句。INFILE 关键字后面跟的是一个包含文件名的字符串,可以使用全路径名,如果只有文件名则在当前工作目录寻找。 三、 SAS的基本统计分析功能、SAS过程初步 前面讲过,SAS系统用SAS数据步生成和管理数据,用过程步进行分析、报表、绘图。下面介绍SAS过程步的一般用法和常用语句的含义,以及几个简单报表、分析、绘图过程的使用。 3.1 SAS过程步的一般形式为: PROC 过程名 DATA=输入数据集 选项; 过程语句 / 选项; 过程语句 / 选项; …… RUN; 其中PROC语句的选项是可选的,用来规定过程运行的一些设置,如果有多个选项用空格分开。DATA=输入数据集也是可选的,如果缺省的话使用最近生成的数据集。过程步一般以RUN 语句结束,也可以省略RUN语句而在下一个过程步或数据步的开始处结束,另外还有一种所谓 “交互式过程”可以在遇到RUN语句时不结束过程运行,只有遇到QUIT语句或者下一个过程步、数据步时才结束。过程步在PROC语句之后、结束之前可以有若干个过程语句。通常情况下,过程语句与数据步中的语句不同,数据步中的语句不能用在过程步中。过程步语句一般以某一个关键字开头,比如VAR、BY、TABLES、WEIGHT等,语句中有一些有关说明,如果有选择项的话要写在斜杠后。 SAS过程步有些是对数据集作某种变换(比如SORT过程对数据集排序),不生成显示结果;多数过程步是对数据集作某些分析、报表,这时结果出现在OUTPUT窗口(高精度绘图过程的输出在GRAPHICS窗口)。对OUTPUT窗口的结果,我们可以用“File | Save As”菜单把它保存到一个文本文件进行进一步的修饰,插入到其它报告中,也可以用“File | Print ”菜单之间打印。 3.2 SAS过程步常用语句 本小节简单介绍几个在SAS过程步中常见的语句,更具体的用法可以在以后实际用到时再仔细体会。 VAR语句 VAR语句在很多过程中用来指定分析变量。在VAR后面给出变量列表: VAR 变量名1 变量名2 … 变量名n; 变量名列表可以使用省略的形式,如X1-X3,MATH--CHINESE等。VAR用法例如: var math chinese; MODEL语句 MODEL语句在一些统计建模过程中用来指定模型的形式。其一般形式为 MODEL 因变量 = 自变量表 / 选项; 比如 model math=chinese; 即用语文成绩预测数学成绩。 BY语句和CLASS语句 BY语句在过程中一般用来指定一个或几个分组变量,根据这些分组变量值把观测分组,然后对每一组观测分别进行本过程指定的分析。在使用带有BY语句的过程步之前一般先用SORT过程对数据集排序。比如,假设我们已经把C9501数据集按性别排序,则下列PRINT 过程可以把男、女生分别列出: proc print data=c9501; by sex; run; 结果为 The SAS System   ----------------------------------- SEX=男 -----------------------------------   OBS NAME MATH CHINESE   1 李明 92 98 2 王思明 86 90 3 张聪 98 109     ----------------------------------- SEX=女 -----------------------------------   OBS NAME MATH CHINESE   4 张红艺 89 106 5 刘颍 80 110 在一些过程(如方差分析)中,使用CLASS语句指定一个或几个分类变量,它实际相当于因变量。而在另一些过程(如MEANS)中,CLASS语句作用与BY语句类似,可以指定分类变量,把观测按分类变量分类后分别进行分析。使用CLASS时不需要先按分类变量排序。 3.3 用PRINT过程制作列表报告 基本用法 PRINT过程是最常用的SAS过程之一。我们在生成了一个数据集之后,如果不是太大,一般都用一个 proc print;run; 过程步来列出数据集的内容,这样可以检查变量与值之间对应是否正确,数据输入是否正确。为了列出一个指定的数据集,在PROC语句中使用DATA=选项指定要列表的输入数据集名,比如: proc print data=sasuser.gpa; run; 在过程内使用VAR语句可以指定要列出的变量并指定顺序。比如, proc print data=c9501; var name chinese sex; run; 列出变量NAME、CHINESE、SEX的值。注意这已不是生成时的变量顺序。变量MATH未列出。结果如下 The SAS System OBS NAME CHINESE SEX   1 李明 98 男 2 张红艺 106 女 3 王思明 90 男 4 张聪 109 男 5 刘颍 110 女 注意PRINT的输出第一列总是标为OBS,值为观测序号。我们有时不想输出这一列,可以在PROC PRINT语句中加入NOOBS选项,如: proc print data=c9501 noobs; run; 结果中就没有了OBS这一列。 使用中文列标题 为了对列标题使用中文,可以在过程内用LABEL语句给变量指定标签,同时在PROC PRINT语句中加LABEL选项,例如: proc print data=c9501 noobs label; var name sex math chinese avg; label name='姓名' sex='性别' math='数学' chinese='语文' avg='平均分'; run; 则结果如下: The SAS System 6 姓名 性别 数学 语文 平均分 李明 男 92 98 86.8333 张红艺 女 89 106 88.6667 王思明 男 86 90 80.5000 张聪 男 98 109 94.4167 刘颍 女 80 110 85.8333 实际上,我们还可以在生成数据集的数据步中使用如上的label语句,结果数据集中的变量就有了标签,在过程步中可以直接使用而不需再次用label语句定义。 标题及全程语句 我们从上面的输出结果看到,在每页输出结果上面有一行标题,内容为“The SAS System”。事实上,我们可以指定自己的标题来取代SAS缺省的标题。指定标题的TITLE语句的格式为: TITLE ' 标题内容'; 例如,在前一例的程序前面加上一行 title '95级1班成绩表'; 则输出结果的标题为“95级1班成绩表”。要注意的是,TITLE语句是一个所谓的“全程” 语句,“全程”语句与一般语句不同,一般语句必须用在数据步或过程步内,作为数据步或过程步的一部分,而全程语句则既可以用在数据步和过程步内,又可以单独使用(在数据步、过程步外部)使用。全程语句的作用一般有持续性,即:全程语句的效果将持续到退出SAS 系统或用另一个同样的全程语句来修改它。比如,我们在上面用TITLE语句指定了一个标题,那么,这个标题的作用将持续下去,虽然下一个过程没有用TITLE语句指定标题它也会出现在下一个过程的输出中,例如在上面用TITLE语句为C9501数据集的列表输出加了标题后,再运行如下程序: proc means data=sasuser.gpa; run; 你会发现标题“95级1班成绩表”仍出现在输出的每一页,而这个标题已经与输出内容矛盾了(现在分析的是SASUSER.GPA数据集而不是C9501数据集)。为了取消这个标题,只要用一个没有规定内容的空TITLE语句,即: title; 这时连缺省的“The SAS System”标题也没有了。 另一个全程语句OPTIONS语句可以规定系统运行的一些选择项,比如输出是否每页有页号,是否有日期,输出的行宽,输出每一页的高度(行数),等等。其使用例如: options nonumber nodate linesize=78 pagesize=60; 其中NONUMBER表示输出不显示页号(改用NUMBER则规定显示页号),NODATE表示不在每页显示运行日期和时间(改用DATE则显示),LINESIZE=78规定输出每行最宽不超过78个字符,PAGESIZE=60 规定输出每页为60行,不足时用空行补齐。 用BY语句分组处理 前面我们已经讲过,在过程步中使用BY语句可以指定分类变量,把观测分类处理。在使用带有BY语句的过程之前一般用SORT过程对数据集按照分类变量排序。例如: proc sort data=c9501; by sex; run; proc print data=c9501; by sex; run; 结果为: ----------------------------------- SEX=男 ----------------------------------- OBS NAME MATH CHINESE AVG 1 李明 92 98 86.8333 2 王思明 86 90 80.5000 3 张聪 98 109 94.4167   ----------------------------------- SEX=女 -----------------------------------   OBS NAME MATH CHINESE AVG   4 张红艺 89 106 88.6667 5 刘颍 80 110 85.8333 计算总计和小计 在PRINT过程中可以用SUM语句计算某个变量的总计(总和)。例如,9501班的同学购买课外书所用的钱数用如下程序输入数据集: data bkmoney; input name $ amount; cards; 李明 20 张红艺 15 王思明 10 张聪 20 刘颍 50 ; run; 为了列出此数据集并计算全班的总书款,只要在PRINT过程中加上SUM语句,SUM语句中指定要求和的变量名AMOUNT: proc print data=bkmoney noobs; sum amount; run; 结果为: NAME AMOUNT 李明 20 张红艺 15 王思明 10 张聪 20 刘颍 50 ====== 115 可见总额为115元。 SUM语句中也可以指定多个变量名,可以同时对这些变量求和。 用BY语句与SUM语句就可以既计算总和也计算分组小计。比如,我们除了要计算学生购买课外书总支出外还想分男、女生计算总支出,可以用下面的程序。注意由于数据集BKMONEY 中没有性别的信息,我们用了带MERGE语句的数据步来横向合并C9501和BKMONEY两个数据集。 proc sort data=c9501; by name; proc sort data=bkmoney; by name; data new; merge c9501 bkmoney; by name; run; proc sort data=new; by sex; proc print data=new; by sex; sum amount; run; 程序的结果为: ----------------------------------- SEX=男 ----------------------------------- OBS NAME MATH CHINESE AVG AMOUNT 1 李明 92 98 86.8333 20 2 王思明 86 90 80.5000 10 3 张聪 98 109 94.4167 20 ------ SEX 50     ----------------------------------- SEX=女 -----------------------------------   OBS NAME MATH CHINESE AVG AMOUNT   4 刘颍 80 110 85.8333 50 5 张红艺 89 106 88.6667 15 ------ SEX 65 ====== 115 可见总额为115,男生小计为50,女生小计为65。 我们得到了一个全中文的统计表格。 3.4 用SORT过程排序 在SAS过程中用BY语句可以把观测分类进行处理,但在此之前需要先用SORT过程排序。SORT过程可以把数据集按某一个或若干个变量的次序进行排序。比如,我们要把数据集C9501 的观测(行)按性别排序(分类),可以用此程序: proc sort data=c9501; by sex; run; 注意这样用DATA=指定的数据集既是输入数据集又是输出数据集。过程的结果在输出窗口没有显示,只是把数据集按要求进行了排序。 可以按几个变量排序,比如,要按男、女性别排序,并在男生、女生内部按平均分由高到低排序,可以这样作: proc sort data=c9501; by sex descending avg; run; BY语句内在一个变量名前面加上DESCENDING关键字表示此变量的排序是由大到小的。 结果可以用proc print;run;显示出来。 3.5 MEANS过程、UNIVARIATE过程、FREQ过程 这三个过程用来计算简单的数据汇总信息。MEANS和UNIVARIATE过程对区间变量计算均值、标准差等数字特征,而FREQ过程对离散变量计算取值频数分布。 例如,我们要对C9501中的数学成绩、语文成绩计算简单统计量,只要用如下MEANS过程: proc means data=c9501; var math chinese; run; 如果使用UNIVARIATE过程则可以计算较多的统计量,例如我们分析SASUSER.h_w中的变量h,可以用如下程序: proc univariate data=sasuser.h_w; var h; run; 其中T:Mean=0是用来检验变量的平均值是否为0 的t统计量,Pr>|T|是相应的p值。另外,M(Sign)和Sgn Rank也是检验同样的零假设,使用符号检验和符号秩检验。输出中还包括五个最低值和五个最高值。 FREQ过程可以考察离散变量的取值分布,在TABLES语句中指定要分析的变量。比如,我们想了解C9501中性别的分布情况,可以用: proc freq data=c9501; tables sex; run; 结果为 Cumulative Cumulative SEX Frequency Percent Frequency Percent ------------------------------------------------- 男 3 60.0 3 60.0 女 2 40.0 5 100.0 可见FREQ的分析结果包括变量每个值的取值频数(观测个数)、百分比、累积频数、累积百分比。也可以对区间变量使用FREQ过程列出频数分布,如 tables math; 3.6 用CORR过程计算相关系数 相关系数可以反映变量两两之间的线性相关。比如,为了计算SASUSER.h_w中的三个变量H、W、之间的相关系数(普通的Pearson相关系数),只要用如下程序: proc corr data=sasuser.h_w; var h w; run; 输出分为两个部分,第一部分是各变量的简单统计量,第二部分是相关系数矩阵。比如,h和w之间的相关系数为0.72368,这个相关系数为零的显著性概率值为0.0007。第一个数是行变量和列变量之间的相关系数,第二个数是检验这两个变量之间相关系数为0的检验的显著性概率值(p值)。 3.7 用SAS/GRAPH绘图 SAS可以把存贮在SAS数据集中的数据以图形的方式形象直观地显示出来。在SAS/GRAPH 模块的支持下,SAS可以作散点图、曲线图、直方图、扇面图、三维曲面图、等高线图。 proc plot; plot h*w= "."; run; 3.8一些单变量检验问题 对单个变量,我们可能需要作正态性检验、两独立样本均值相等的检验、成对样本均值相等的检验。 正态性检验 在PROC UNIVARIATE语句中加上NORMAL选项可以进行正态性检验。例如,我们要检验SASUSER.GPA 中GPA是否服从正态分布,只要用如下UNIVARIATE过程: proc univariate data=sasuser.h_w normal; var h; run; 其中W:Normal为Shapiro-Wilk正态性检验统计量,Pr2000时用Kolmogorov D统计量。我们可以看到,p值很小,所以在0.05水平(或0.10水平)下应拒绝零假设,即认为h分布非正态。 在SAS/INSIGHT中为了检验h的分布,先选“Analyze | Distribution”菜单打开h 变量的分布窗口,然后选“Curves | Test for Distribution”菜单。除了可以检验是否正态分布外还可以检验是否对数正态、指数分布、Weibull分布。 两独立样本的均值检验 假设我们有两组样本分别来自两个独立总体,需要检验两个总体的均值或中心位置是否一样。 如果两个总体都分别服从正态分布,而且方差相等,可以使用两样本t检验过程TTEST 。 比如,我们要检验SASUSER.h_w数据集中男生和女生的h是否具有相等的平均值,只要用如下程序: proc ttest data=sasuser.h_w; class s; var h; run; 过程中用CLASS语句指定分组变量,用VAR语句指定要比较的变量。 结果有三个部分:两个总体的h简单统计量,两样本均值的检验,以及两样本方差是否相等的检验。标准的两样本t检验要求两总体方差相等,所以第三部分结果检验两样本方差是否相等。如果检验的结果为相等,则可使用精确的两样本t检验,看第二部分结果的Equal那一行。如果方差检验的结果为不等,则只能使用近似的两样本t检验,看第二部分结果的Unequal 那一行。 如果非正态。这种情况下我们可以使用非参数检验。检验两独立样本的均值是否相同的非参数检验有Wilcoxon秩和检验。我们用NPAR1WAY过程加Wilcoxon选项可以进行这种检验。见下例: proc npar1way data=sasuser.h_w wilcoxon; class s; var h; run; 成对总体均值检验 我们在现实中经常遇到两个总体是相关的测量结果的比较,比如,考察同一组人在参加一年的长跑锻炼前后的心率有无显著差异。这时,每个人一年前的心率和一年后的心率是相关的,心率本来较快的人锻炼后仍相对于其它人较快。所以,检验这样的成对总体的均值不能使用两样本t检验的方法,因为独立性条件不再满足。这时,我们可以检验两个变量间的差值的均值是否为零,这等价于检验两组测量值的平均水平有无显著差异。 检验单个样本的均值是否为零只要使用UNIVARIATE过程,在UNIVARIATE过程的矩部分给出了均值为零的t检验和符号检验、符号秩检验的结果。例如,我们想知道Math和English这两门考试的成绩有无显著差异(Math平均值为78,English平均值为80.22222,我们希望知道差异是否显著)。因为这两个成绩是同一个学生的成绩,所以它们之间是相关的(学得好的学生两科一般都好,学得差的一般两科都差),不能用独立两样本的t检验,但可以计算两变量间的差aa =math-english,检验差值变量的均值是否为零。如果否定,则可认为math和english的平均值有显著差异。 为此,我们先用一个数据步计算差值,然后对差值变量用UNIVARIATE过程进行分析就可以得到结果。程序如下: data new; set sasuser.h_w; aa=math-english; run; proc univariate data=new; var aa; run; 我们只要看其中的三个检验:T: Mean=0是假定差值变量服从正态分布时检验均值为零的t 统计量值,相应的p值Pr>|T|为0.0779在0.05水平下不显著,所以可认为两科分数有没有显著差异。M(Sign)是非参数检验符号检验的统计量,其p值Pr>=|M|为0.2379在0.05水平下不显著的,结论不变。Sgn Rank是非参数检验符号秩检验的统计量,其p值Pr>=|S|为0.0963 在0.05水平下不显著,结论不变。所以这三个检验的结论都是两科成绩没有显著差异。 3.9用REG过程进行回归分析 两个变量Y和X之间的相关关系经常可以用一个函数来表示,一元函数可以等同于一条曲线,实际工作中经常对两个变量拟合一条曲线来近似它们的相关关系。最基本的“曲线” 是直线,还可以用多项式、样条函数、核估计和局部多项式估计。 SAS/STAT中提供了几个回归分析过程,包括REG(回归)、RSREG(二次响应面回归)、ORTHOREG(病态数据回归)、NLIN(非线性回归)、TRANSREG(变换回归)、CALIS(线性结构方程和路径分析)、GLM(一般线性模型)、GENMOD(广义线性模型),等等。我们这里只介绍REG过程。 REG过程的基本用法为: PROC REG DATA=输入数据集 选项; VAR 可参与建模的变量列表; MODEL 因变量=自变量表 / 选项; PRINT 输出结果; PLOT 诊断图形; RUN; proc reg data=sasuser.h_w; var w h; model w=h; plot w* h=” *”; run; 。 3.10方差分析入门 统计学中用方差分析来研究分类变量(所谓“因素”)对数值型变量(所谓“指标” )的影响。主要目的是研究某些因素对于指标有无显著的影响。对有显著影响的因素,一般希望找出最好水平。 用ANOVA过程进行单因素方差分析 单因素方差分析是两独立样本的均值检验问题的一个自然延续。在两独立样本的均值检验中,我们有一个分类变量把观测分为两组,我们要研究这两组的均值有没有显著差异。如果这个分类变量的取值不只两个,则这时两独立样本的均值检验的检验方法不再适用,但我们同样要解决各组均值是否有显著差异的问题。如果各组之间有显著差异,说明这个因素(分类变量)对指标是有显著影响的,因素的不同取值(叫做水平)会影响到指标的取值。 Data veneer; Input brand $ wear; Cards; Acme 2.3 Acme 2.1 Acme 2.4 Acme 2.5 Champ 2.2 Champ 2.3 Champ 2.4 Champ 2.6 Ajax 2.2 Ajax 2.0 Ajax 1.9 Ajax 2.1 Tuffy 2.4 Tuffy 2.7 Tuffy 2.6 Tuffy 2.7 Xtra 2.3 Xtra 2.5 Xtra 2.3 Xtra 2.4 Proc print data=veneer; Title '木板数据’; Run; Proc sort data=veneer; By brand; Run; Proc means data=veneer; By brand; Var wear; Title '木板数据的概括’; Run; Proc anova data=veneer; Class brand; Model wear=brand; Means brand /t bon ; Title '木板数据的方差分析'; run; Proc npar1way data=veneer wilcoxon; Class brand; Var wear; Title '木板数据的非参数检验; Run; 例如,数据集SASUSER.VENEER中为比较若干种牌子的胶合板的耐磨情况得到的数据,变量BRAND 为试样的牌子,变量WEAR为试样的磨损量。共有五种牌子的胶合板,每种试验了4个试样。我们希望知道这五种牌子胶合板的磨损量有无显著差别,如果无显著差别我们在选购时就不必考虑哪一个更耐磨而只需考虑价格等因素,但如果结果有显著差异则应考虑使用耐磨性好的牌子。这里,因素是胶合板的牌子,指标为磨损量,当各种牌子胶合板磨损量有显著差异时,说明因素的取值对指标有显著的影响。所以,方差分析的结论是因素对指标有无显著影响。注意,经典的方差分析只判断因素的各水平有无显著差异,而不管两个因素之间是否有差异,比如说我们的五个牌子即使有四个牌子没有显著差异,只有一个牌子的胶合板比这四个牌子的都好,结论也是说因素是显著的,或因素的各水平间有显著差异。 方差分析把指标的方差分解为由因素的不同取值能够解释的部分,和剩余的不能解释的部分,然后比较两部分,当能用因素解释的部分明显大于剩余的部分时认为因素是显著的。方差分析假定观测是彼此独立的,观测为正态分布的样本,由因素各水平分成的各组的方差相等。在这些假定满足时,就可以用ANOVA过程来进行方差分析。其一般写法为 PROC ANOVA DATA=数据集; CLASS 因素; MODEL 指标=因素; RUN; 比如,为了分析SASUSER.VENEER中各种牌子的胶合板的耐磨性有无显著差别,首先我们假定假设检验使用的检验水平为0.05,可以使用如下程序进行方差分析: proc anova data=sasuser.veneer; class brand; model wear=brand; run; 结果可以分为四个部分,第一部分是因素水平的信息,我们看到因素只有一个BRAND,它有5个水平,分别是ACME、AJAX、CHAMP、TUFFY、XTRA。共有20个观测。第二部分就是经典的方差分析表,表前面指明了因变量(指标)为WEAR,第一列“来源”说明方差的来源,是模型的(可以用方差分析模型解释的),误差的(不能用模型解释的),还是总和。第三列为平方和,其大小代表了各方差来源作用的大小。第二列为自由度。第四列为均方,即平方和除以自由度。第五列F值是F统计量的值,其计算公式为模型均方除以误差均方,用来检验模型的显著性,如果不显著说明模型对指标的变化没有解释能力。第六列是F统计量的p值。由于这里p值小于0.05(我们的检验水平),所以模型是显著的,因素对指标有显著影响。结果的第三部分是一些与模型有关的简单统计量,第一个是复相关系数平方,与回归模型一样仍代表总变差中能被模型解释的比例,第二个是变异系数,第三个是根均方误差,第四个是指标的均值。结果的第四部分是方差分析表的细化,给出了各因素的平方和和F统计量,因为是单因素所以这一行与上面的“模型”一行相同。 用NPAR1WAY进行非参数单因素方差分析 当方差分析的正态分布假定或方差相等假定不能满足时,对单因素问题,可以使用非参数方差分析的Kruskal-Wallis检验方法。这种检验不要求观测来自正态分布总体,不要求各组的方差相等,甚至指标可以是有序变量(变量取值只有大小之分而没有差距的概念,比如磨损量可以分为大、中、小三档,得病的程度可以分为重、轻、无,等等)。 NPAR1WAY过程的调用与ANOVA过程不同,因为它是单因素方差分析过程,所以只要用CLASS 语句给出分类变量(因素),用VAR语句给出指标就可以了,一般格式为:
/
本文档为【统计分析系统SAS应用(2011短学期)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索