.SAS过程初步.(转载自SAS园地)SAS过程用法及常用语句oSAS过程用法oSAS过程步常用语句用PRINT过程制作列表报告o基本用法o使用中文列标题o标题及全程语句o用BY语句分组处理o计算总计和小计用TABULATE过程作统计量表格用SORT过程排序MEANS过程、UNIVARIATE过程、FREQ过程用CORR过程计算相关系数用SAS/GRAPH绘图o散点图和曲线图o直方图和扇形图o三维曲面图和等高线图o图形的调整与输出前面讲过,SAS系统用SAS数据步生成和管理数据,用过程步进行分析、报表、绘图。本章介绍SAS过程步的一般用法和常用语句的含义,以及几个简单报表、分析、绘图过程的使用。SAS过程用法及常用语句SAS过程用法SAS过程步的一般形式为:PROC过程名DATA=输入数据集选项;过程语句/选项;过程语句/选项;……RUN;其中PROC语句的选项是可选的,用来规定过程运行的一些设置,如果有多个选项用空格分开。DATA=输入数据集也是可选的,如果缺省的话使用最近生成的数据集。过程步一般以RUN语句结束,也可以省略RUN语句而在下一个过程步或数据步的开始处结束,另外还有一种所谓“交互式过程”可以在遇到RUN语句时不结束过程运行,只有遇到QUIT语句或者下一个过程步、数据步时才结束。过程步在PROC语句之后、结束之前可以有若干个过程语句。通常情况下,过程语句与数据步中的语句不同,数据步中的语句不能用在过程步中。过程步语句一般以某一个关键字开头,比如VAR、BY、TABLES、WEIGHT等,语句中有一些有关说明,如果有选择项的话要写在斜杠后。SAS过程步有些是对数据集作某种变换(比如SORT过程对数据集排序),不生成显示结果;多数过程步是对数据集作某些分析、报表,这时结果出现在OUTPUT窗口(高精度绘图过程的输出在GRAPHICS窗口)。对OUTPUT窗口的结果,我们可以用“File|SaveAs”菜单把它保存到一个文本文件进行进一步的修饰,插入到其它报告中,也可以用“File|Print”菜单之间打印。SAS过程步常用语句本小节简单介绍几个在SAS过程步中常见的语句,更具体的用法可以在以后实际用到时再仔细体会。一、VAR语句VAR语句在很多过程中用来指定分析变量。在VAR后面给出变量列表:VAR变量名1变量名2…变量名n;变量名列表可以使用省略的形式,如X1-X3,MATH--CHINESE等。VAR用法例如:varmathchinese;二、MODEL语句MODEL语句在一些统计建模过程中用来指定模型的形式。其一般形式为MODEL因变量=自变量表/选项;比如modelmath=chinese;即用语文成绩预测数学成绩。三、BY语句和CLASS语句BY语句在过程中一般用来指定一个或几个分组变量,根据这些分组变量值把观测分组,然后对每一组观测分别进行本过程指定的分析。在使用带有BY语句的过程步之前一般先用SORT过程对数据集排序。比如,假设我们已经把C9501数据集按性别排序,则下列PRINT过程可以把男、女生分别列出:procprintdata=c9501;bysex;run;结果为TheSASSystem2-----------------------------------SEX=男-----------------------------------OBSNAMEMATHCHINESE1李明92982王思明86903张聪98109-----------------------------------SEX=女-----------------------------------OBSNAMEMATHCHINESE4张红艺891065刘颍80110在一些过程(如方差分析)中,使用CLASS语句指定一个或几个分类变量,它实际相当于因变量。而在另一些过程(如MEANS)中,CLASS语句作用与BY语句类似,可以指定分类变量,把观测按分类变量分类后分别进行分析。使用CLASS时不需要先按分类变量排序。四、OUTPUT语句在过程步中经常用OUTPUT语句指定输出结果存放的数据集。不同过程中把输出结果存入数据集的方法各有不同,OUTPUT语句是用得最多的一种,其一般格式为:OUTPUTOUT=输出数据集名关键字=变量名关键字=变量名…;其中用OUT=给出了要生成的结果数据集的名字,用“关键字=变量名”的方式指定了输出哪些结果(关键字的例子比如MEANS过程中的MEAN,VAR,STD等等),等号后面的变量名指定了这些结果在输出数据集中叫什么名字。例如procmeansdata=sasuser.c9501;varmath;outputout=resultn=nmean=meanmathvar=varmath;run;procprintdata=result;run;五、FREQ语句和WEIGHT语句FREQ语句指定一个重复数变量,每个观测中此变量的值说明这个观测实际代表多少个完全相同的重复观测。FREQ变量只取整数值。如freqnumcell;WEIGHT语句指定一个权重变量,在某些允许加权的过程中代表权重,其值与观测对应的方差的倒数成比例。六、ID语句有些过程(如PRINT、UNIVARIATE)需要输出观测的代号,这一般使用观测的序号。但是,如果数据集中有一个变量可以用来区分观测(如人名、省市名),就可以用ID语句指定这个变量作为观测标识,如:idname;指定用变量NAME的值来标识观测。七、WHERE语句用WHERE语句可以选择输入数据集的一个行子集来进行分析,在WHERE关键字后指定一个条件。比如:wheremath=60andchinese=60;指定只分析数学、语文成绩都及格的学生。八、LABEL语句和FORMAT语句LABEL语句为变量指定一个标签,很多过程可以使用这样的标签。其格式为LABEL变量名='标签'变量名='标签'…;例如procprintdata=sasuser.c9501label;idname;varmathchinese;labelname='姓名'math='数学成绩'chinese='语文成绩';run;结果显示姓名数学成绩语文成绩李明9298张红艺89106王思明8690张聪98109刘颍80110FORMAT语句可以为变量输出规定一个输出格式,比如procprintdata=sasuser.c9501;formatmath5.1chinese5.1;run;使得列出的数学、语文成绩宽度占5位,带一位小数。事实上,在生成数据集的DATA步中也可以用FORMAT语句规定变量的输出格式,用LABEL语句规定变量的标签,用LENGTH语句规定变量的存贮长度,用ATTRIB语句同时规定变量的各属性。在数据步中规定的变量属性是附属于数据集本身的,是永久的;在过程步中规定的变量属性(标签、输出格式等)只用于此过程的本次运行。用PRINT过程制作列表报告本节讲解PRINT过程的使用,并用它来辅助讲解一些常用语句的使用。基本用法PRINT过程是最常用的SAS过程之一。我们在生成了一个数据集之后,如果不是太大,一般都用一个procprint;run;过程步来列出数据集的内容,这样可以检查变量与值之间对应是否正确,数据输入是否正确。为了列出一个指定的数据集,在PROC语句中使用DATA=选项指定要列表的输入数据集名,比如:procprintdata=sasuser.gpa;run;在过程内使用VAR语句可以指定要列出的变量并指定顺序。比如,procprintdata=c9501;varnamechinesesex;run;列出变量NAME、CHINESE、SEX的值。注意这已不是生成时的变量顺序。变量MATH未列出。结果如下TheSASSystem3OBSNAMECHINESESEX1李明98男2张红艺106女3王思明90男4张聪109男5刘颍110女注意PRINT的输出第一列总是标为OBS,值为观测序号。我们有时不想输出这一列,可以在PROCPRINT语句中加入NOOBS选项,如:procprintdata=c9501noobs;run;结果中就没有了OBS这一列。在过程中使用WHERE语句可以从输入数据集中选一个子集来处理,在PRINT过程中使用WHERE可以指定只列出满足条件的观测。比如,procprintdata=c9501;wherenamein('李明','张聪');run;结果为OBSNAMESEXMATHCHINESEAVG1李明男929886.83334张聪男9810994.4167只列出了李明和张聪两个人的观测。注意其观测序号分别为1和4,这是生成C9501数据集时确定的。使用中文列标题为了对列标题使用中文,可以在过程内用LABEL语句给变量指定标签,同时在PROCPRINT语句中加LABEL选项,例如:procprintdata=c9501noobslabel;varnamesexmathchineseavg;labelname='姓名'sex='性别'math='数学'chinese='语文'avg='平均分';run;则结果如下:TheSASSystem6姓名性别数学语文平均分李明男929886.8333张红艺女8910688.6667王思明男869080.5000张聪男9810994.4167刘颍女8011085.8333实际上,我们还可以在生成数据集的数据步中使用如上的label语句,结果数据集中的变量就有了标签,在过程步中可以直接使用而不需再次用label语句定义。标题及全程语句我们从上面的输出结果看到,在每页输出结果上面有一行标题,内容为“TheSASSystem”。事实上,我们可以指定自己的标题来取代SAS缺省的标题。指定标题的TITLE语句的格式为:TITLE'标题内容';例如,在前一例的程序前面加上一行title'95级1班成绩表';则输出结果的标题为“95级1班成绩表”。要注意的是,TITLE语句是一个所谓的“全程”语句,“全程”语句与一般语句不同,一般语句必须用在数据步或过程步内,作为数据步或过程步的一部分,而全程语句则既可以用在数据步和过程步内,又可以单独使用(在数据步、过程步外部)使用。全程语句的作用一般有持续性,即:全程语句的效果将持续到退出SAS系统或用另一个同样的全程语句来修改它。比如,我们在上面用TITLE语句指定了一个标题,那么,这个标题的作用将持续下去,虽然下一个过程没有用TITLE语句指定标题它也会出现在下一个过程的输出中,例如在上面用TITLE语句为C9501数据集的列表输出加了标题后,再运行如下程序:procmeansdata=sasuser.gpa;run;你会发现标题“95级1班成绩表”仍出现在输出的每一页,而这个标题已经与输出内容矛盾了(现在分析的是SASUSER.GPA数据集而不是C9501数据集)。为了取消这个标题,只要用一个没有规定内容的空TITLE语句,即:title;这时连缺省的“TheSASSystem”标题也没有了。用全程语句FOOTNOTE可以为输出加脚注,如:footnote'第三章例子输出';则其后的输出每页下方会有脚注“第三章例子输出”,直到用另一个FOOTNOTE语句指定新的脚注,或用空FOOTNOTE语句取消脚注为止。另一个全程语句OPTIONS语句可以规定系统运行的一些选择项,比如输出是否每页有页号,是否有日期,输出的行宽,输出每一页的高度(行数),等等。其使用例如:optionsnonumbernodatelinesize=78pagesize=60;其中NONUMBER表示输出不显示页号(改用NUMBER则规定显示页号),NODATE表示不在每页显示运行日期和时间(改用DATE则显示),LINESIZE=78规定输出每行最宽不超过78个字符,PAGESIZE=60规定输出每页为60行,不足时用空行补齐。用BY语句分组处理前面我们已经讲过,在过程步中使用BY语句可