SAS讲义 第十七课使用列表报告PROC PRINT和汇总报告PROC TABULATE_第1页
SAS讲义 第十七课使用列表报告PROC PRINT和汇总报告PROC TABULATE_第2页
SAS讲义 第十七课使用列表报告PROC PRINT和汇总报告PROC TABULATE_第3页
SAS讲义 第十七课使用列表报告PROC PRINT和汇总报告PROC TABULATE_第4页
SAS讲义 第十七课使用列表报告PROC PRINT和汇总报告PROC TABULATE_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十七课使用列表报告PROCPRINT和汇总报告PROCTABULATE利用SAS系统提供的各种过程可以制作各种风格的报表。一份好的输出报表可以使用户更直观、更清楚和更容易地了解和明白统计计算的结果,因此如何制作一个能充分揭示运算结果信息和满足要求的报告,也是非常重要的。SAS系统提供的各种制作报表过程中,最常用的是以下两种:列表报告PROCPRINT过程汇总报告PROCTABULATE过程一■列表报告PROCPRINT过程所谓列表报告PROCPRINT过程,将输出SAS数据集中的数值,输出时把数据集中的每一个变量形成输出报表的列,而每一个观测形成输出报表的一行。1PROCPRINT过程的主要功能PROCPRINT过程输出的数据列表具体地说主要能够做到以下几点:变量的输出格式用户可以选择(Format语句)可在输出报表中加上标题(Title)和脚注(Footnotes语句)可输出数据集中变量的任何子集(Where语句)•可以控制变量是否出现以及出现的顺序(Var语句)用户可以自己定制列表头(Label语句)可分组输出观测数据(By语句)可计算所有观测值或分组观测值的总和(Sum/Sumby语句)及其它统计量每页报表的宽度和长度以及每列的宽度都可控制(选项Width=)当数据集中变量太多时,可分成几部分输出(选项Rows=)2PROCPRINT过程语句格式在PROCPRINT过程中,常常配合使用了许多其它SAS语句以达到所要求的输出报表格式,我们把在PROCPRINT过程中常用的一些语句的基本使用格式列出,具体使用时根据需要可能使用其中的几条语句。如下所示:PROCPRINT <选项列表〉;VAR变量列表;ID变量列表;BY变量列表;PAGEBY变量;SUMBY变量;上海财经大学经济信息管理系IS/SHUFE.SUM变量列表;TITLEn“标题内容”;FOOTNOTEn“标题内容”;LABEL变量1=“标签*内容”变量2=“标签*内容”;FORMAT变量输出格式;WHERE条件表达式;Run;3PROCPRINT的选项PROCPRINT的选项列表包含许多选项,选项之间以空格分隔,选项没有先后次序。我们下面列出一些主要选项:DATA^据集名一给出要打印输出的SAS数据集。如果省略,则为最近建立的SAS数据集。N——求在输出这个数据集的数据列表之后,同时输出观测的总输出条数。如果使用了BY分组语句,在每一个分组后输出各个分组输出观测的条数。LABEL或L——用变量的标签作为输出数据列表中每列的抬头。如果变量没有定义标签,则用变量名作为列抬头。SPLIT或S='分隔符'一规定一个字符(如*号或#号)用于将较长的标签分隔成几行。在这个选项里定义了某个分隔符以后,过程中的LABEL语句里就可以使用这个分隔符了。另外选项SPLIT=ffLABEL不必同时使用。NOOBS——不输出观测数据的序号。当不用ID语句且又不要输出观测的序号时,可使用该选项。DOUBLE或D——求输出隔行打印。ROUND或R——对用FORMAT语句规定变量的输出格式中的小数点位进行四舍五入。HEADING=H或V——规定打印列抬头的方向。H或HORIZONTAL表示所有列抬头水平打印,V或VERTICAL表示所有列抬头垂直打印。WIDTH=FULL或MIN或U或UBY——规定使用什么作为列宽。FULL表示使用变量格式化宽度,MIN或MINIMUM表示使用可能的最小列宽,U或UNIFORM表示对所有页一致地使用变量格式化宽度,UBY或UNIFORMBY表示在BY组内对所有页一致地使用变量格式化宽度。ROWS=PAGE—当数据集包含很多变量和观测时,使用此选项将在每一页中打印尽可能多的观测,能减少输出页数。VAR语句、ID语句和BY语句我们前面已经说明过了,这里不再重复。PAGEBY语句要求和BY语句一起使用,当PAGEBY变量的值改变或者在BY语句中列在PAGEBY变量前的BY变量值改变时,PRINT过程将从新的一页开始输出。SUM语句规定计算总和的变量,SUM语句中规定的变量可以没有列在VAR语句中,PRINT过程将自动把SUM语句中规定的变量加到VAR变量列表中。SUMBY语句必须和BY语句连用,用来对一部分BY组中指定的变量求和。每当SUMBY变量的值变化或者BY语句中列在SUMBY变量前的变量值改变时,PRINT将把对应BY组中的SUM语句中的变量求和。如果没有规定SUM语句,则将对数据集中BY变量以外的所有数值变量求和。SUMBY语句的本质是通过指定BY变量列表中变量位置而限制BY组中SUM变量求和。4举例例如,我们要输出SURVEY数据集的报表。报表之一的要求是:选择输出身高小于1.75米的观测,同时给出满足条件的总输出条数,自定义要显示的变量和顺序,不显示观测的序号,求和INCOME变量的值,修改BDATE变量和INCOME变量输出格式,且修改它们的列标题并分两行显示,加两个标题和一个脚注。程序如下:LIBNAMESTUDY“D:\SASDATA\MYDIR”;PROCPRINTdata=study.surveynoobsnsplit二'*'roundwidth二min;VARnamesexincomebdateheighweight;SUMincome;TITLE1“PROCEDUREPRINT”;TITLE2“Dept.ofInformationSystem";FOOTNOTE1-SHANGHAIUNIVERSITYOFFINANCEANDECONOMICS,;LABELBdate="Dateof*Brithday"Income="Total*Income";FORMATBdateDATE7.Incomedollar12.2;WHEREheighv=1.75;Run;程序运行结果见图17-1所示。**************************-I□冈Filh!Edi+ViGli:«b:ils0^.+ienEWindoTMelp-!□!x|m土aJMslaL^ljdMsHMi-!□!x|UNIVERSITYOFFINANCEANDECONOMirSUNIVERSITYOFFINANCEANDECONOMirSPROCEDUREPRINTDept・口fInf口厂mmti口仃System06:53Tuesday,TotalDateofNAMESEX1nc口IT1EBrithdayHEIGHHEIGHTXIAUER11©12,120.1201JAN801.7151.332HANGSANF01JUL791.G948.18UANGUUM$89,888.88010匚T4T1.7471.01ZHhOLIUF©50,500.0508MAR811.7251.114$187,869.41BoUTFUT-OJiititled)图17—1用PROCPRINT过程输出的SURVEY数据集报表之一脚注显示在一页的最下方,通常一页的长度要大于窗口的长度,所以有时正文和脚注的内容并不一定能同时显示在OUTPUT窗口中。我们可以用Globals/Options/Globaloptions命令,调出Options对话单,修改页尺寸PAGESIZE参数为17行,然后选择Options/Savesettingsnow命令保存当前的设置。报表之二的要求是:修改报表一,按SEX变量中的值M和F进行分组求和(用BY语句),同时将分组值M和F列在分组报告的最左边(用ID语句)。要分组求和,指定数据集中的分组变量值必须事先已经按升序排序好了,如果没有排序过,常常先用SORT过程对分组变量进行排序。去掉脚注。程序如下:LIBNAME STUDY“D:\SASDATA\MYDIR”;PROCSORTData=study.surveyout=study.bysex;B(y sex;PROCPRINT data=study.bysexnoobsnsplit='*'roundwidth=min;VARnameincomebdateheighweight;IDsex;BYsex;SUMincome;TITLE1“PROCEDUREPRINT”;TITLE2“Dept.ofInformationSystem";FOOTNOTE1;上海财经大学经济信息管理系IS/SHUFE.

LABELBdate="Dateof*Brithday"Income="Total*Income";FORMATBdateDATE7.Incomedollar12.2;WHEREheigh〈=1.75;Run;程序运行结果见图17—2所示:图17—2用PROCPRINT过程输出的分组求和报表之二在使用了TITLE和FOOTNOTE语句后,所定义的标题和脚注将一直保持有效,直到另一个TITILE或FOOTNOTE语句被执行。我们在程序中用不带任何内容的FOOTNOTE1语句替代原先同样号码的脚注,实际上它能取消拥有更大号码的脚注。二■汇总报告PROCTABULATE过程当一个SAS数据集包含不太多的数据时,列表报告可以很好地描述数据,但是当数据集包含大量信息时,就需要使用汇总报告了。PROCTABULATE用分类报表的形式输出满足用户要求的描述性统计量。每一个表单元属于用交叉变量名组成的特殊观测类。与每一个单元有关的统计量是由该类所有观测值计算得到的。在通常情况下,产生汇总报表要先将数据根据需要进行分类,然后在分类的基础上计算一些统计量。**************************PROCTABULATE过程的三要素一个最简单的PROCTABULATE过程必须定义下列三要素:类变量——可以是数值型变量或字符型变量。分类的目的是为了在每一个类上进行计算和分析。分析变量 一定是数值型变量。可以计算的一些统计量如:频数(frequency)、均值(mean)、标准差(standarddeviation)、最小值(minimum)、最大值(maximum)>极差(range)、总和(sum)、百分数(percentages)等。表的结构和格式——最多可以定义三个维度:第一维定义列,第二维定义行,第三维定义页。并且可以通过TABLE语句中的表达式计算统计量,用操作符,如:逗号、空格、星号、圆括号等,来组织单元集合。另外还能格式化单元中的数据值和产生用户化的行标题和列标题。PROCTABULATE语句格式在PROCTABULATE过程中,常常使用一些控制汇总报表产生的语句,一般过程形式如下:PROCTABULATE〈选项列表〉;CLASS 分类变量列表;VAR 分析变量列表;TABLEvv页表达式,>行表达式,>列表达式</表选项〉;LABEL 变量1=“标签*内容”变量2=“标签*内容”……;KEYLABEL统计量名字1=“标记1”统计量名字2=“标记2”FORMAT 变量输出格式;WHERE 条件表达式;Run;PROCTABULATE语句总是伴随着至少一个TABLE语句来规定如何制表。用在TABLE语句的分类变量必须用CLASS语句说明。用在TABLE语句的分析变量必须用VAR语句说明。同时出现在CLASS语句和VAR语句中的变量,只能作为分类变量使用。CLASS、VAR和TABLE语句是构成PROCTABULATE过程最基本的三条语句。PROCTABULATE的选项PROCTABULATE的选项列表包含许多选项,选项之间以空格分隔,几个主要的选项说明如下:•DATA=^据集名一给出要制表输出的弘S数据集。如果省略,则为最近建立的

SAS数据集。NOSEPS——求在表体中不出现水平分隔线。FORMCHARV(索引表)>='字符串'——规定用来构造报表轮廓和分隔线的字符。字符串为11个制表字符,用来定义画垂直和水平线的2个字符,及画9个角字符:左上、中上、右上、左中、中中(交叉)、右中、左下、中下、右下。缺省值是FORMCHAR='|l+l'o如果要改变边角线,例如想把4个角换成*,则可使用FORMCHAR(35911)='****',如果FORMCHAR-选项赋了11个空格,则生成没有边框和分隔线的报表。MISSING——求把丢失值作为分类变量的有效水平。即汇总时包含分类变量中有丢失值的观测。4TABLE语句的使用和输出表格结构如何正确地理解和使用TABLE语句是掌握PROCTABULATE过程的关键所在。汇总报表输出的表格形状和所计算的统计量都是由TABLE语句中的表达式决定的,这个表达式中包含元素和操作符。元素指分类变量、分析变量和统计量,当表达式包含多个元素时,需要用操作符把它们连接起来。使用不同的操作符连接会产生不同的表格形状。下面列出一些主要的操作符及其作用:TABLE表达式中的操作符作用逗号 ,转另一维空格表格并排连接星号 *交叉组合分组园括号 ()分组或规定次序为了便于理解TABLE表达式中操作符的作用,我们举一个假设的例子来说明。有SAS数据集ABCX,其中有四个变量A、B、C和X,变量A、B、C我们将在PROXTABULATE过程中用CLASS语句定义为分类变量,我们可以理解为它是一个产品的大类A、中类B和小类Co而X变量是一个数值型变量,用VAR定义为分析变量,我们可以理解为它是一个产品的销售数量或收入金额或价格等。假设的数据集ABCX可能数据值如下表所示:变量名TABLE中的变量类型可能的数据值A分类变量A1,A2B分类变量B1,B2C分类变量C1,C2,C3X分析变量111〜223ABCX数据集中的具体观测值见下表所示:OBSABCX1A1B1C11112A1B1C21123A1B1C31134A1B2C11215A1B2C21226A1B2C31237A2B1C12118A2B1C22129A2B1C321310A2B2C122111A2B2C222212A2B2C3223下面我们给出分析变量X和分类变量A、B、C组成的有效表达式的输出报表格式。例1:TABLE表达式中只有一个分类变量A,既没有规定分析变量,也没有指明统计量,则缺省的统计量为频数N,即分类变量值的交叉频数。程序和输出汇总报表形式如下所示:ProctabulateData=ABCX;ClassA;VarX;TableA;Run;AA1A2NN66例2:使用逗号操作符隔开TABLE语句的两个表达式将产生一个两维表格,第一个表达式定义行,第二个表达式定义列。程序和输出汇总报表形式如下所示:ProctabulateData=ABCX;ClassAB;VarXTableA,B;Run;BB1B2NNA33A1A233上海财经大学经济信息管理系IS/SHUFE.

例3:使用两个逗号操作符隔开TABLE语句的三个表达式将产生一个三维表格,第一个表达式定义页,第二个表达式定义行,第三个表达式定义列。程序和输出汇总报表形式如下所示: ProctabulateData=ABCX;Class ABC;Var X; TOC\o"1-5"\h\zTable A,B ,C;Run;第一页AA1CC1C2C3NNNB111B1B2111第二页AA2CC1C2C3NNNB111B1B2111例4:使用空格操作符隔开TABLE语句的两个表达式将产生一个连排表格。程序和输出汇总报表形式如下所示:TOC\o"1-5"\h\zProctabulateData=ABCX;Class A B ;Var X ;Table A B ;Run;ABA1A2B1B2NNNN6666例5:使用星号操作符隔开TABLE语句的两个表达式将产生一个交叉等级表格。程序和输出汇总报表形式如下所示:上海财经大学经济信息管理系IS/SHUFE.TOC\o"1-5"\h\zProctabulateData=ABCX;Class AB ;Var X ;Table A*B ;Run;AA1A2BBB1B2B1B2NNNN3333例6:使用含有园括号、空格和星号操作符的复合表达式。在复合表达式中,交叉操作符星号优于连接操作符空格,但可以使用园括号操作符来改变它们的次序,如(AB)*C表达式相当于A*CB*C。程序和输出汇总报表形式如下所示:ProctabulateData=ABCX;ClassABC;VarX;Table(AB)*C;Run;ABA1A2B1B2CCCCCCCCCCCCCCCC123123123123NNNNNNNNNNNN2222222222225汇总报告中计算统计量在TABLE语句中使用星号操作符连接分析变量和统计量,如TABLEA*X*MEAN,其中A是分类变量,X是分析变量,MEAN是统计量,则可以对指定的分析变量X计算指定MEAN统计量。在TABLE语句中如果没有规定分析变量,则N或PCTN(频数N的百分数)可作为统计量使用,如TABLEA*N或TABLEA*PCTN。如果TABLE语句中规定了分析变量,但没有指定统计量时,如TABLEA*X,则SUM作为统计量。如果TABLE语句中既

没有出现分析变量如X,又没有出现统计量如MEAN,例如上面的例1—6中的TABLE语句都没有规定分析变量和统计量,如TABLEA语句只规定了分类变量A,则每个表单元将给出分类变量的交叉频数。在TABLE语句中如果规定了分析变量,则可以要求计算下表所示的一个或几个统计量。统计量作用N确定的子组中含有有效数据的观测数NMISS确定的子组中含有缺失值的观测数MEAN算术平均STD标准误差MIN最小值MAX最大值RANGE极差(取值范围)SUM总和USS未修正的平方和CSS关于均值修正的平方和(也称偏差平方和)STDERR均值的标准误差CV变异系数T检验总体均值为0假设时,t统计量的值PRT显著性概率(大于t统计量绝对值的概率)VAR方差SUMWGT' 权数变量的和PCTN某一类中某一小类观测所占的百分比PCTSUM某一类观测在全部观测中所占的百分比多个分析变量和多个统计量能够出现在同一维中,也可以出现在不同的维中。但是所有的分析变量必须出现在某一维中,所有的统计量也一样必须出现在同一维中。不能用一个分析变量同另一个分析变量交叉,统计量之间也不能交叉。例如下面两条语句都是合法的:TABLEA*(X*MEANX*MAX),BTABLEA*X,B*MEANC*MAX另外,统计量操作元素除了可以是统计量关键字,如MEAN或MAX,也可以是以下形式的百分数表达式:TABLEA*B*PCTN<A*B>TABLEA*B*PCTN<A>其中<A*B>和vA>是求频数百分数时设定的分母,两条语句所求出来的百分数显然是不同的。分母为<A>的语句比分母为vA*B>的语句求出的百分数要大。我们已经知道,在TABLE语句中分类变量都要事先在CLASS语句中定义过,但是有一个特殊的分类变量叫ALL,也称全类变量。全类变量ALL可以直接用在TABLE语句中,它仅有一个值,表示所有的子集和及总和,这是一个非常有用的类,常放在表格的最后一行和最后一列计算总和的统计量。例如下面的语句:TABLEA*X*MEANALL*X*MEAN

6定义汇总报表的输出格式汇总报表的输出除了要构造汇总报表结构和正确地进行描述统计计算外,还应满足用户对输出报表的有关数据和标题的格式要求。有以下几种定义报表输出格式的方法:⑴当一个分类变量、分析变量或统计量用作操作元素时,可以跟随着等号和标签。例如,假设原来的TABLE语句为:TABLEA*X*MEAN现在为了修改列标题改为:TABLEA='CLASS'*X='QUANTITY'*MEAN='AVERAGE'这样,输出的汇总报表中的列标题从原来的“A”变成“CLASS”,“X”变成“QUANTITY”,“MEAN”变成“AVERAGE”。⑵操作元素还可以进行格式说明,通过*号连接FORMAT或卩=输出格式名。例如:TABLEA='CLASS'*f=12・2*X='QUANTITY'*f=10・2*MEAN='AVERAGE'*f=8・要注意分类变量A这个元素后的输出格式是数字格式f=12.2,而不是字符格式,因为它说明的是交叉单元中MEAN计算的数字结果。实际上起作用的是最后一个f=8.的格式说明。⑶使用KEYLABLE和LABEL语句。KEYLABLE语句用于对出现在页、行或列上的统计量名字和ALL分类变量名字重新标记。LABEL语句用于对出现在页、行或列上的分类变量或分析变量规定标签。例如:KEYLABELMEAN='AVERAGE'ALL='TOTAL'LABELA='SEX'X='AMOUNT'要注意KEYLABLE和LABEL语句中定义的标签,比在TABLE语句中变量后跟随着等号和标签的定义方法优先级低。⑷使用PROCFORMAT过程和FORMAT语句。PROCFORMAT过程用来对字符变量或数值变量定义用户自己的输入输出格式。FORMAT语句用于规定分类变量的输出格式。两者的配合使用可以使分类变量按用户自定义格式输出。例如:PROCFORMAT;VALUE$SEXFMTAl='Female'A2='Male'PROCTABULATEDATA=ABCXFORMATA$SEXFMT。;RUN;$SEXFMT是用户自定义的输出格式名,注意在使用时要在输出格式名后加一个小圆点。当分类变量A定义为输出格式$SEXFMT.后,在输出的汇总报表中,分类变量A原先在行或列标题上输出的是两个分类值A1和A2,现在改为输出Female和Male。⑸使用TABLE语句中选项列表。如果规定任选项,第一项前必须加斜杆/。能够在TABLE语句中出现很多选项,下面我们列出一些常用的选项:MISSTEXT='文本字符'一表输出时如果有缺失值,则用'文本字符'替代。PRINTMISS——求输出所有可能的行和列,即使某个特殊的行和列交叉单元中数据不存在。FUZZ=数字——提供一个数字,让分析变量的值和表单元中的计算结果与这个数

字比较,如果绝对值小于这个数字,看作0处理。RTS=数字一一提供一个整数,用来规定行标题输出时的左和右边界值。⑹使用PROCTABULATE语句中的FORMAT^出格式名选项。对每一个报表单元规定缺省的输出格式,如果没有规定此选项,缺省值是BEST12.2。此选项主要用于减少报表中输出数值的域宽。但是如果遇到在TABLE语句中规定有任何输出格式,它将被取代。7汇总报表综合举例假设我们要输出一个数据集SURVEY的汇总报表。按性别SEX和全类ALL进行分类,求平均年令AGE、最大的身高HEIGH、最小的重量WEIGHT、平均收入INCOME和男女人数的百分比PCTN。修改大标题和增加一个小标题,并格式化输出表格的行列标记和单元内容。程序如下:libnamestudy""d:\sasdata\mydir

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论