快速学会使用SAS软件的方法

2016-11-16 07:33郭春雪胡良平
四川精神卫生 2016年5期
关键词:调用语句程序

郭春雪,胡良平,2*

(1.军事医学科学院生物医学统计学咨询中心,北京 100850;2.世界中医药联合会临床科研统计学专业委员会,北京 100029*通信作者:胡良平,E-mail:lphu812@sina.com )



科研方法专题

快速学会使用SAS软件的方法

郭春雪1,胡良平1,2*

(1.军事医学科学院生物医学统计学咨询中心,北京 100850;2.世界中医药联合会临床科研统计学专业委员会,北京 100029*通信作者:胡良平,E-mail:lphu812@sina.com )

为了使读者能快速了解和学习到有关SAS软件的基础知识和用法,本文简明扼要地介绍了SAS软件的历史和结构,以及SAS软件有关的基础知识。包括SAS过程与SAS程序、运行SAS的两种常用方式、SAS程序结构、SAS语言、SAS用法,还有SASPAL软件。基于所介绍的内容,借助SASPAL软件,读者可以花较少的时间学会如何使用SAS软件解决约90%以上的生物医学和临床科研数据的统计分析问题。

SAS软件;SAS过程;SAS程序;临时和永久SAS数据集;统计分析

学习和运用统计学,除了了解与统计学有关的基本概念和方法外,最艰巨的任务就是借助统计软件方便快捷地实现试验设计、资料的可视化和各种统计分析。然而,现在计算机统计软件的种类非常多,例如SAS、SPSS、STAT、BMDP、MATLAB、R、S-plus、MLwiN等。其中,有些属于综合性统计软件,功能强大、实用面极宽,这类统计软件中最具有代表性的是Statistical Analysis System(SAS软件)[1];有些属于专业性统计软件,在某些方面或特殊领域做得非常深入,但在“宽泛”方面显得不足,这类统计软件中最具有代表性的是MLwiN软件(实现多水平模型[2]分析的软件)。

本文介绍SAS软件,主要是考虑到它不仅可以被用于试验设计、资料可视化和各种统计分析,还可以用于进行科学管理和决策支持,甚至可以借助它的丰富编程语言,研制软件系统。

1 SAS软件简介

1.1 SAS软件的历史简介

SAS软件研究所(常简称为SAS公司)迄今已有近50年的发展历程[3]:1966年-1975年,为了分析大量的农业数据,美国北卡罗来纳州立大学的包括Jim Goodnight博士在内的几位学者在当时最大的主机系统上开发了用于统计分析的软件,即SAS软件的雏形。1976年,Goodnight博士和其他3个合伙人在北卡的Raleigh小城创立了SAS公司,同年举办第一届SAS用户大会(SUGI)和SAS软件的第一个商用版本Base SAS发布会。1988年,SAS公司Cary总部员工超过1 000人,SAS软件安装在超过65%的IBM主机系统上,SAS系统全部用C语言重新开发,引入多硬件厂商架构(MVA),发布SAS版本6。这是第一个可运行在Unix、MS-DOS和Windows平台上的SAS版本。

因篇幅所限,SAS的发展历程就不详细呈现了。SAS软件与其他统计软件的最明显不同之处:其一,以模块式组成;其二,租给全球用户使用。在中国大陆的上海和北京都有SAS办事处,用户可根据自己选定的模块个数去租用。目前,最新版本的SAS软件为SAS 9.4。

1.2 SAS软件的结构简介

SAS软件采取模块式结构,每个模块可被称之为一个SAS产品。有些SAS产品中仅有具体的SAS过程(即编译后的SAS程序),如SAS/STAT;有些SAS产品中不仅有SAS过程,还有其他内容,如SAS语言、SAS窗口、SAS宏、SAS SQL等,见SAS/BASE;有些SAS产品本身就是一个功能比较齐全的软件,可以完成一系列相关的功能,如SAS/ASSIST模块、SAS/ANALYST模块和SAS/INSIGHT模块等;还有些SAS产品是其他SAS产品的开发工具,如SAS/AF等。

SAS软件正常安装后,在计算机桌面上就会显示一个快捷方式“图标”,用鼠标左键双击此图标,就可进入SAS系统。SAS 9.3软件的界面见图1。

图1 进入SAS 9.3后的主界面

在SAS主界面上,顶部有两行,分别为“菜单栏”和“工具栏”,左边有一个“SAS资源管理器窗口”,与它重叠的一个窗口是“结果窗口”;右边有两个窗口,上方的窗口是“日志窗口”,下方的窗口是“程序编辑器窗口”,通过顶部菜单条中的“窗口”选项,可以切换到其它窗口,如“输出窗口”。

可以说,基本的SAS窗口有“SAS资源管理器”、“结果”、“程序编辑”、“日志”和“输出”窗口,但另外还有30多个窗口可供用户处理打印和微调SAS会话之类的操作。这些窗口的名称和窗口命令的详细列表从略,若用户想获得此列表,可通过下面的方法实现:先选中主界面第二行工具栏最后一个选项(图标为一本书),即帮助(help)。然后按照“帮助(help)→SAS产品→Base SAS→SAS窗口引用→SAS窗口索引”的步骤显示全部SAS窗口列表。

2 使用SAS软件需要了解的基础知识

2.1 SAS过程与SAS程序

SAS过程是SAS软件中经过编译后的程序,这些程序解决问题所依赖的理论和方法是被公认的,因此,可以做到标准化、程序化和系统化。然而,用户要解决的问题却是千变万化的:用户的数据是什么、存放在何处,都是无法预知的。用户在调用某个具体的SAS过程之前,必须将上述信息传递给SAS系统,这些信息必须依据SAS语言规则来组织,它们被称为SAS引导程序,简称为SAS程序。

不同的SAS过程被放置在SAS软件包的不同模块中,只要SAS软件被正确安装,它们就存在了,用户只需按规定的方式去调用它们即可。而SAS程序需要用户结合自己要解决的问题和已有的数据,利用SAS语言去编写。SAS程序可以直接在前述提及的“程序编辑窗口”中输入,也可以将存储在其他地方的SAS程序直接读入,还可以用鼠标左键双击已经存在的SAS程序,启动SAS系统并且直接将SAS程序读入“程序编辑窗口”中。

2.2 运行SAS软件的两种常用方式

在SAS系统中运行SAS软件通常有两种方式,其一,非编程法(或称为菜单驱动法),即用户不需要编写SAS程序就可以直接调用SAS过程实现希望达到的目的。事实上,当用户通过菜单驱动系统选择某些项时,SAS系统内部就在进行自动编程(即自动产生SAS程序),当用户的选择工作结束时,SAS程序也就全部被产生出来,故也实现了用户的目的。但并非所有的任务都能通过此法来实现。其二,编程法,即用户亲自在程序编辑窗口编写SAS程序(或直接调用别人事先写好的SAS程序)并提交给SAS系统执行。提交SAS程序的方法为点击图1中上方第2行功能键倒数第4个图标(一个小人图像)。

用非编程法运行SAS的方法比较啰嗦,可参见有关文献[3],因篇幅所限,此处从略。本文仅介绍如何用编程法运行SAS软件。

2.3 SAS程序结构

SAS程序通常由两部分组成:一部分用于提供待分析的数据,称为SAS数据步;另一部分调用SAS系统中已编译过的能处理某个具体问题的真正程序,称为SAS过程步。一段SAS程序可以有多个SAS数据步和多个SAS过程步,有时也可以仅有其中的一种。若仅有SAS数据步,就需要利用SAS语言编写程序,以达到某个特定的研究目的;若仅有SAS过程步,必须事先提供可供调用的数据(称为SAS数据集)。

现以分析四格表资料的SAS程序为例,使读者快速了解SAS程序。

【例1】在文献[4]中,某临床医师分别用阿戈美拉汀和氟西汀各治疗38例首发抑郁症患者,治疗结果如下:阿戈美拉汀治疗组有效33例、无效5例;氟西汀治疗组有效32例、无效6例。试分析两药物疗效之间的差异是否有统计学意义。

【分析与解答】这是一个典型的四格表资料,若用SAS软件来分析此资料,需要编写的SAS程序如下,设程序名为:SASTJFX1.SAS。

data p320_table1;

do drug=1 to 2;

do liaoxiao=1 to 2;

input f @@;

output;

end;

end;

cards;

33 5

32 6

;

run;

ods html;

proc freq;

tables drug*liaoxiao/chisq;

weight f;

run;

ods html close;

上面这段SAS程序是由多个SAS语句组成的,每个SAS语句以“;”结束,所有SAS语句都必需符合“SAS语言”的要求和规范。从“data p320_table1;”语句到第1个“run;”语句,这段SAS程序被称为SAS数据步程序;而从“proc freq;”语句到第2个“run;”语句,这段SAS程序被称为SAS过程步程序;“ods html;”与“ods html close;”两个语句,分别打开与关闭SAS软件中的“ODS”系统。“ODS”是“Output Delivery System(即输出传输系统)的缩写”,其中,“html”要求系统依网页格式输出计算结果(SAS 9.3及以上版本中可省略这两个语句,默认出现网页输出结果)。

下面,对以上这段SAS程序中的每一个语句的含义作一简要介绍:

第1句“data p320_table1;”是创建一个名为“p320_table1”的临时SAS数据集(具体含义详见后面的内容)。

第2句到第6句是两个“do-end”循环体,目的是给四格表资料取行变量名“drug”与列变量名“liaoxiao”,它们都有两个水平“1”与“2”,分别代表第1行、第2行;第1列、第2列。“input f @@;”用变量f读取四格表中的4个频数,其中,“@@”为指针控制符,确保每行上的数据都能被读取完。“output;”将变量f读取的每一个数据及时送出循环体之外存储起来。

第7句与第8句为“cards;”与“;”分别表示数据的开始与结束。

第9句“run;”表示SAS数据步的结束。

第11句“proc freq;”表示拟调用SAS软件中的“freq”过程。

第12句“tables drug*liaoxiao/chisq;”表示四格表资料的行变量名为“drug”、列变量名为“liaoxiao”,“chisq”要求系统对四格表资料进行卡方检验。

第13句“weight f;”表示在所创建的数据集中,f变量的具体取值为“频数”,即四格表中每个格上的“例数”。

第14句“run;”表示SAS过程步的结束。

将上面这段SAS程序提交给SAS系统执行,主要输出结果如下。

“liaoxiao-drug”的统计量(n=76)

Fisher 精确检验

此输出结果表明:χ2=0.1063、P=0.7444;而Fisher精确检验,双侧概率P=1.0000。统计学结论为:两种药物治疗首发抑郁症疗效差异无统计学意义;专业结论为:两种药物治疗首发抑郁症疗效相当。

2.4 SAS语言简介[5]

2.4.1 SAS语言概述

SAS语言由基本SAS语言(如SAS文件、基本SAS语句、常用SAS函数、SAS数组和SAS过程等)和高级SAS语言(如宏、SAS SQL、SAS ODS、SAS/IML等)两部分组成。

2.4.2 SAS函数概述

SAS中提供的常用SAS函数近500个,如求-12.3的绝对值,其对应的SAS语句为:“Y=ABS(-12.3);”,也可这样写:“X=-12.3; Y=ABS(X);”;再比如,求49的平方根,其对应的SAS语句为:“Y=SQRT(49);”,也可写作:“X=49; Y=SQRT(X);”。有些函数使用起来就没有这么简单了,因为那些函数中可能带有多个参数,需要明白这些参数的含义,才能正确调用那些函数,获得用户需要的结果。SAS函数大致可分为25类[6],其中,最常用的SAS函数有算术函数、字符函数、数学函数、概率和密度函数、分位数函数、随机数函数、样本统计量函数、SAS文件输入输出函数和截取函数等。

2.4.3 SAS过程概述

SAS软件中有30多个模块,每个模块中一般都有几十个SAS过程。这些SAS过程都能完成什么任务,如何正确调用这些SAS过程,也不是轻而易举能交代清楚的。例如本文例1就是调用了“freq”过程。此过程是专门用于对二维或高维列联表资料(即结果变量为定性变量的资料)进行各种差异性分析的真正程序。在编写SAS程序时,必须在SAS过程名之前加上“proc”。常用的对定性结果变量进行建模分析的SAS过程有:LOGISTIC、SURVEYLOGISTIC、CATMOD等过程;常用的对定量结果变量进行差异性分析的SAS过程有:TTEST、ANOVA、GLM、MIXDED等过程;常用的对定量结果变量进行建模分析的SAS过程有:REG、SURVEYREG、ROBUSTREG等过程。

2.4.4 SAS数据集简介

SAS数据集的概念:无论采用非编程法还是编程法运行SAS,首先都必须创建SAS数据集。直接在SAS程序编辑窗口录入原始数据,将其存储在某个外部设备上,只能称其为一个外部数据文件,不能称其为SAS数据集。数据只有经过SAS系统加工后并按特定方式存储才能被称为SAS数据集,它将变量名及其取值(即具体数据)有机地结合在一起。

SAS数据集的种类:SAS数据集分为两类,一类被称为临时SAS数据集(如程序SASTJFX1.SAS中的数据集p320_table1),它被存储在SAS/WORK库(即文件夹)中,一旦退出SAS系统,它就消失了;另一类被称为永久SAS数据集,即使退出SAS系统,它仍被保留。这种数据集必须被保存在非SAS/WORK库中,可以是SAS系统默认的某个库,也可以是用户自己创建的某个库(即文件夹)。

创建临时SAS数据集的方法很简单,只需要像程序SASTJFX1.SAS那样去做就可以了。其具体语句是从“data p320_table1;”到第1个“run;”语句,当这段数据步SAS程序语句提交给SAS执行后,就在SAS临时数据库WORK中创建了一个名为“p320_table1”的临时SAS数据集。

【例2】创建永久SAS数据集的方法。假定在D盘上有一个文件夹名为SASTJFX,试将程序SASTJFX1.SAS中的数据步改造成能创建永久SAS数据集,并将永久数据集存储在D盘SASTJFX文件夹中。

【分析与解答】所需要的SAS数据步如下,设程序名为SASTJFX2.SAS。

LIBNAME table ‘D:SASTJFX’;

DATA table.p320_table1;

(以下语句与前面的“SASTJFX1.SAS”完全相同,从略)

程序说明:LIBNAME语句是创建文件关联名的重要语句,其后引号中的内容为路径(包括盘符和文件夹名),table是用户自己取的关联名(一般不要超过8个字符),它就代表其后所写的路径。在DATA语句中,写“table.p320_table1”,就意味着要创建一个名为p320_table1的永久SAS数据集,它被存储在D盘SASTJFX文件夹中,存储后的实际数据集名为:p320_table1.sas7bdat。

SAS数据集名的种类:通常,SAS数据集名有两类,一类被称为“一词名”,另一类被称为“两词名”。如上面所述,临时SAS数据集为一词名(如p320_table1),而永久SAS数据集为两词名(如table.p320_table1)。在“一词名”中又可细分为以下三种:①用户自己取的一个词(如p320_table1),以字母或SAS允许的符号开头,中间不包含英文句号(即圆点),长度不超过8个字节;②直接将DATA语句写成:“DATA;”的形式,用户未给数据集取名,SAS系统会自动给数据集取名,当执行一次SAS数据步后,系统将所创建的SAS数据集取名为DATA1,再运行一次,取名为DATA2……;③使用SAS系统保留的特殊数据集名,如_DATA_、_NULL_和_LAST_。可以写成“DATA _DATA_;”,与写成“DATA;”是等价的,将各次创建的数据集依次命名为DATA1、DATA2……;若写成“DATA _NULL_;”表明SAS系统将执行数据步,可用“PUT”等SAS语句输出中间结果,但观测值并不被写入SAS数据集_NULL_,这样可以节省计算机资源;用“DATA _LAST_;”时,表明在此之前(指此次进入SAS系统以来)无论创建了多少个SAS数据集,只调用最后被创建的那个SAS数据集。

3 SAS软件用法简介

3.1 实际运行SAS

什么叫实际运行SAS?若拟采用非编程法运行SAS,只需根据SAS说明书中的步骤“点菜单(因篇幅所限,此处从略)”就能获得所需要的结果,这是第一种实际运行SAS的方法;第二种实际运行SAS的方法是在SAS程序编辑窗口中输入一段正确的SAS程序,提交给SAS系统执行,前面“第2.3节”已演示了这种运行SAS的方法。

3.2 初学者学习SAS的快捷方法

前面在介绍SAS程序结构和常用SAS语句时,已顺便介绍了如何用编程法使用SAS。由此可见,使用SAS并不是一件非常困难的事,困难在于SAS语言的内容很多,包括SAS语句、SAS函数、SAS过程、SAS高级编程技术。需要花很多时间学习和实践。

笔者给初学者提供一种学习SAS快速入门的方法,即调用他人编制好的SAS程序,只要解决了“对号入座”问题(即每个程序是干什么的),用自己的数据替换掉已有的SAS程序中的数据,将程序发送给SAS系统去执行,就可获得自己需要的计算结果。每次结合他人的SAS程序和程序语句的讲解,一次学一点,不需多长时间,自己就慢慢掌握了很多常用的SAS语言,也就是说,边学边解决实际问题,不仅不会望而生畏,反而见效很快。

3.3 SASPAL软件是用户快速学会使用SAS软件的得力助手

前面说“调用他人编制好的SAS程序”是一种学习SAS快速入门的方法。问题是:从哪里可以获得能解决用户实际问题的大量“SAS程序”呢?笔者在所编撰的多部统计学专著中,将书中的全部SAS程序汇集在一起,编制成一个名叫“SASPAL(意思是使用SAS的朋友)”的小软件,只要用户在自己的计算机上成功地安装了SAS软件,并且安装了笔者随书附带的SASPAL小软件,就可以轻松自如地运用SAS软件解决大约90%的实际问题(因为还有约10%的统计分析问题,需要重新编写复杂的SAS程序方可实现)。下面简单介绍笔者的两本统计学专著中随书附带的SASPAL软件及其用法。

3.3.1 《SAS统计分析教程》配套软件SASPAL简介

《SAS统计分析教程》[7]中的配套软件SASPAL包含了全书中的所有SAS程序,共有数百个SAS程序,内容包括定量与定性资料的差异性分析、定量与定性资料的预测性分析、多变量间相互与依赖关系分析、变量或样品间亲疏关系或近似程度分析、数据挖掘、绘图、实验设计和样本含量估计。

3.3.2 《科研设计与统计分析》配套软件SASPAL简介

《科研设计与统计分析》[8]中的配套软件SASPAL包含了全书中的所有SAS程序,共有数百个SAS程序,内容包括统计学基础、科研设计、单因素设计一元定量与定性资料的统计分析、单组设计二元定量资料相关与回归分析、多因素设计一元定量与定性资料差异性分析与综合评价、多因素设计一元定量与定性资料多重回归分析、多元统计分析和SAS语言基础与高级编程技术。进入《科研设计与统计分析》中的配套软件SASPAL的界面见图2。

图2 进入《科研设计与统计分析》中配套软件SASPAL的界面

3.3.3 SASPAL软件的使用说明

与SAS软件配套使用的SASPAL软件小巧玲珑、使用极为方便。它是一个可执行文件,用鼠标左键双击该文件,很快就被安装完毕。在计算机桌面上会出现带有书名的“小图标”,用户使用鼠标左键双击此“小图标”,就启动了SASPAL软件。左边有书上的“目录”,右边会显示书中“例题编号”和“SAS程序编号”。用户可以根据自己拟解决的问题,找到书中相应内容,选择相应的“SAS程序编号”,与其对应的“SAS程序”可以自动被调入SAS软件的程序编辑器窗口。通常情况下,用户只需用自己的数据取代SAS程序中原有的数据,提交给SAS系统执行即可。当然,有时,需要对原有的SAS程序语句作少量修改。具体修改方法参见书中的“修改说明”或实例,此处从略。

[1] Ramon CL,George AM, Walter WS,et al.SAS System for Mixed Models[M].SAS Institute Inc,Cary,NC,USA, 1996:1-86.

[2] 王济川, 谢海义, Fisher J. Multilevel Models:Applications Using SAS[M].北京:高等教育出版社, 2009: 1-38.

[3] 胡良平.SAS实验设计与统计分析[M].北京: 人民卫生出版社, 2010: 45-170, 565-573.

[4] 马素杰, 王润泽, 马元业.阿戈美拉汀治疗首发抑郁症的临床效果[J].四川精神卫生, 2016, 29(4): 319-322.

[5] 胡良平, 胡纯严.SAS语言基础与高级编程技术[M].北京: 电子工业出版社, 2014: 1-97.

[6] 朱世武.SAS编程技术教程[M].北京: 清华大学出版社, 2007: 62-85.

[7] 胡良平.SAS统计分析教程[M].北京: 电子工业出版社, 2012: 4-706.

[8] 胡良平.科研设计与统计分析[M].北京: 军事医学科学出版社, 2012: 161-716.

(本文编辑:陈 霞)

How to learn the usage of SAS software quickly

GUOChun-xue1,HULiang-ping1,2*

(1.ConsultingCenterofBiomedicalStatistics,AcademyofMilitaryMedicalSciences,Beijing100850,China;2.SpecialtyCommitteeofClinicalScientificResearchStatisticsofWorldFederationofChineseMedicineSocieties,Beijing100029,China*Correspondingauthor:HULiang-ping,E-mail:lphu812@sina.com)

To help readers to understand and master the basic knowledge better as well as basic usage of SAS software, we briefly introduce the history and structure of SAS software, also the related basic knowledge, including SAS procedure, SAS program, two common methods used to run SAS, SAS program structure, SAS language and SASPAL software. Based on the introduction above and the help of SASPAL software, readers can easily use SAS software to solve over 90% of the statistical analysis problems about biomedical and clinical research data in a short time.

SAS software; SAS procedure; SAS program; Temporary and permanent SAS data sets; Statistical analysis

R195.1

A doi:10.11886/j.issn.1007-3256.2016.05.001

2016-10-11)

猜你喜欢
调用语句程序
重点:语句衔接
核电项目物项调用管理的应用研究
试论我国未决羁押程序的立法完善
LabWindows/CVI下基于ActiveX技术的Excel调用
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
基于系统调用的恶意软件检测技术研究
创卫暗访程序有待改进
如何搞定语句衔接题
利用RFC技术实现SAP系统接口通信