第四章 建立SAS报表 |
您所在的位置:网站首页 › sas建立数据集程序 › 第四章 建立SAS报表 |
第四章 建立SAS报表
一.使用PRINT过程步 1.PRINT过程步的基本使用 前面我们已经提到过利用PRINT过程步检查我们建立的SAS数据集的内容,实际上就是用PRINT过程步显示SAS数据集的内容。PRINT过程步由一个PROC PRINT语句开始,其一般形式为: PROC PRINT options; 选项包括DATA=选项,它指定你使用的数据集,如果不使用该选项的话,系统使用最近用到的数据集。另外,在用PRINT过程步显示SAS数据集的内容之前,或者说,在一个程序的开头,往往需要用LIBNAME语句指定SAS数据库。例如: libname clinic'c:\clinic'; proc printdata=clinic.admit; run; 提交这段程序以后,SAS系统就会在OUTPUT窗口中显示该数据集的内容,我们把它称为报表(report)。例如:
ID NAME SEX AGE HEIGHT WEIGHT FEE 2458 Murray, W M 27 72 168 85.20 2462 Almers, C F 34 66 152 124.80 2501 Bonaventure, T F 31 61 123 149.75
2.控制产生的报表 在缺省情况下,PRINT过程步产生的报表会显示: A.数据集中所有的观测和变量 B.在最左边一列显示观测号 C.变量根据它们在数据集中的顺序排列 为了得到你想要的报表,你可以对产生报表的过程进行控制,你可以: A.利用系统选项控制报表的样式 B.选择显示变量和观测 C.对数据进行排序 D.加题注和尾注 E.显示描述性的变量标记 F.对数据规定格式 下面我们一一介绍如何进行控制。 3.设定系统选项 在你用PRINT过程步产生报表之前,你可以先设定一些系统选项控制报表的样式,包括:
选项 功能 LINESIZE= 设定每行的长度 PAGESIZE= 设定每页的行数 NUMBER|NONUMBER 设定是否显示页码 PAGENO= 设定开始页码 DATE|NODATE 设定是否显示日期和时间
每一个系统选项都有缺省设置,例如,在缺省情况下,会自动显示页码。 你可以用以下任一方法改变这些系统选项: 1)用OPTIONS语句 一般形式为: OPTIONS options; 例如: options pagesize=20linesize=76; options numberpageno=1; OPTIONS语句可以出现在SAS程序的任意地方,从语句被执行的地方开始,设定的系统选项起作用,一直到你改变它的设置。 例如: options nonumber nodate; proc printdata=sales.qtr3; proc printdata=sales.qtr4; options date; run; 则在显示SALES.QTR3的时候页码和日期时间均不显示,而在显示SALES.QTR4的时候页码不显示但日期时间显示。注意,SAS系统要遇到DATA、PROC或RUN等关键词的时候才执行会执行前面一个程序步,因此,OPTIONS语句要遇到其后的这些关键词时才会被执行,但它会在其所属的程序步中优先执行。 2)用OPTIONS窗口 另一个改变系统选项的简单方法是进入OPTIONS窗口: 选择: Globals à Options àGlobal Options 找到想要设定的选项,作相应的改变即可。 4.NOOBS选项 你可以在PROC PRINT语句中使用NOOBS选项去掉报表中的观测号列。例如: proc printdata=sales.qtr4 noobs; run; 事实上,PROC PRINT语句中可以使用的选项很多,详细情况可利用HELP窗口查找: Help à SAS System àREPORT WRITING àPRINT 5.选择变量 如果你的数据集中有很多变量,而你只希望显示其中的一部分,你可以在PRINT过程步中用VAR语句指定要显示的变量。其一般形式为: VAR variables; 例如: var age height weight fee; 输出报表中的变量按照在VAR语句中出现的顺序排列。 注意,变量之间用空格分开。 6.选择观测 如果你只需要显示数据集中的某一部分观测,而不是所有的观测,你可以在PRINT过程步中用WHERE语句设定要显示的观测应满足的条件。 1)WHERE语句的一般形式为: WHEREwhere-expression; 条件表达式的写法同第三章中所述相类似。例如: whereweight70; where age160 or height >70); 显然是两个不同的条件。如果不加括号,则照前两个先复合的方法进行。 7.对数字型变量求和 你可以利用SUM语句对数字型变量求和,在输出的报表中,该变量所在列的最下方显示这一列数值的和。SUM语句的一般形式为: SUM variables; 例如: proc print data=vcrsales; varsalesrep region; sumunitcost unit sold; run; 在SUM语句中出现的变量名不需要在VAR语句中指定,也会在输出报表中显示。 8.对数据进行排序 如果你希望在报表中的观测是按照指定的顺序排列的话,就应当在利用PRINT过程步创建报表之前,用SORT过程步对数据进行排序。一个简单的SORT过程步的一般形式为: PROC SORTDATA=SAS-data-set OUT=SAS-data-set; BY variables; RUN; 过程步以PROC SORT语句开始,其中,DATA=选项指明要读的数据集,BY语句是SORT过程步所必需的,它指明要按照哪个(那些)变量的值来进行排序。 OUT=选项指定一个输出数据集,在这个数据集中,所有的观测按指定的顺序排列。注意,如果不使用OUT=选项的话,在DATA=选项中指明的数据集就会被永久性地改变,而如果你只是希望它临时改变的话,就必须用OUT=选项指定一个临时的输出数据集。 9.题注(Titles)和尾注(Footnotes) 在SAS报表中,可以出现题注和尾注,题注出现在每一页的顶部,尾注出现在每一页的底部,如果没有定义,缺省的题注是‘The SAS System’,尾注不定义就不出现。 1)显示题注(Titles) 你可以改变输出报表中的题注,方法有: A.用TITLES窗口 选择Globals à OptionsàTitles 进入TITLES窗口,在相应位置输入你希望作为题注的文字, 选择Edit à End 退出即可。 SAS系统允许有10个题注。 B.用TITLE语句 在产生报表的过程步中或之前用TITLE语句设定题注,其一般形式为: TITLEn 'titletext'; 例如: title1 'July Report'; title3 'group1'; 用TITLE语句同样可以设定10个题注。 2)显示尾注(Footnotes) 你还可以改变输出报表中的尾注,方法与改变题注的方法相似: A.用FOOTNOTES窗口 选择Globals à OptionsàFootnotes 进入FOOTNOTES窗口,在相应位置输入你希望作为尾注的文字, 选择Edit à End 退出即可。 SAS系统允许有10个尾注。 B.用FOOTNOOT语句 在产生报表的过程步中或之前用FOOTNOTE语句设定尾注,其一般形式为: FOOTNOTEn 'footnotetext'; 例如: footnote1 'PrepareedJuly 15'; footnote3 'byfinancial department'; 用FOOTNOTE语句同样可以设定10个尾注。 3)改变题注和尾注的设定 题注和尾注的设定都是全局性的,设定以后,它们的作用一直延续到你重新设定或退出SAS系统。在设定了题注和尾注之后,你如果希望改变或取消这些设定的话,可用以下方法: A.用TITLES 或FOOTNOTES窗口 进入TITLES 或FOOTNOTES窗口,改变或取消其中的设置。 B.用TITLE 或FOOTNOTE语句 用新的TITLE 或FOOTNOTE语句重新设定题注或尾注,新的设定会取代老的设定。 注意,新的TITLE 或FOOTNOTE语句被执行是,除了取代原先同样号码的题注或尾注之外,还会取消更大号码的题注或尾注。 用下列不加号码或不加文字的语句可取消所有的题注或尾注: title1; footnote; 10. 给变量设定描述性标记 如果某些变量名不足以表达该变量数据的性质,你希望在报表中以更准确的词句来作为这些列的标记的话,可以在过程步中使用LABEL语句,其一般形式为: LABEL variable1='label' Variable2='label'; 标记可长达40个字符,并且,必须用引号括起。 你可以用一个LABEL语句,也可以用多个LABEL语句来设定描述性标记。 另外,为了显示标记,在PROC PRINT语句中必须使用LABEL选项。例如: proc printdata=clinic.therapy label; var month wjr; labelwjr='Walk/Jog/Run'; run; 11. 设定输出数据的格式 你可以利用FORMAT语句设定变量的输出格式,以使报表看上去更完美。FORMAT语句的一般形式为: FORMAT variableformat-name; 例如: format net comma5.0 grosscomma8.2; format netcommiss dollar9.2; 在某一个过程步中的FORMAT语句设定的输出数据的格式,仅在同一个过程步产生的报表中起作用。 SAS系统提供许多输出格式,可用于在FORMAT语句中使用。你可以在SAS的HELP穿口中找到所有 的SAS输出格式,方法为: Help à SAS System à SASLANGUAGE à SASFormats and Infortmats 下面是部分常用格式:
格式 例 显示结果 COMMAw.d Comma8.2 1,123.20 DOLLARw.d Dollar6.2 $56.00 MMDDYYw. Mmddyy6. 150599 w.d 8.2 12203.90
12. 自定义输出格式 在SAS系统中,用户还可以用FORMAT过程自己定义输出格式,其一般形式为: PROC FORMAT; VALUEformat-name range1='label' range2='label'; 例如: proc format; value$destfmt 'LON'='London' 'PAR'='Paris' 'HON'='Hongkong'; run; 然后在PRINT过程中的FORMAT语句中就可以自定义的输出格式了,例如: (接上例) proc print data=summer; vardate dest; formatdata date7. Dest $destfmt; run;
二.使用TABULATE过程步 使用PRINT过程步你可以以列表的形式显示数据集的内容,但有时候你可能更希望以表格的形式对数据集中的内容进行分析,这时候,就可以利用TABULATE过程步来帮助你进行这项工作。 1.用TABULATE过程步创建表格 事实上,TABULATE过程步并不是简单地显示数据集的内容,而是对数据集中的内容进行归纳统计以后,根据用户的要求,制作各式表格供用户分析使用。 TABULATE过程步能帮助你方便地设计你的报表,你可以自由决定表格的形式和结构,作出的表格可以是一维的、二维的或三维的。同时,TABULATE过程步能对数据集中的数据进行归纳统计,在表格中显示一些描述性统计量,例如: A.SUM(和) B.MEAN(均值) C.MINIMUM(最小值) D.MAXIMUM(最大值) E.STANDARDDEVIATION(标准偏差) F.VARIANCE(方差) 等等。 你也可以在TABULATE过程步中进行选择观测、设定描述性标记、设定题注和尾注、给数据规定输出格式等操作。 2.设计表格 使用TABULATE过程步的关键是计划,与PRINT过程步不同,TABULATE过程步不会产生缺省的报表,你必须告诉它如何创建表格,因此,在使用TABULATE过程步之前,最好先画一个草表,以明确你自己到底想要得到一个什么样的表格。具体说,你需要决定: A.使用什么数据 B.用什么变量对数据分类 C.对什么变量进行分析 D.表格的形式 3.基本的TABULATE过程步 一个简单的TABULATE过程步包含以下四条基本语句:
语句 功能 PROC TABULATE 启动过程步,设定数据集 CLASS 设定分类变量 VAR 设定分析变量 TABLE 描述产生的表格
其中,PROC TABULATE语句作为TABULATE过程步的开头,是必须要有的,其一般形式为: PROC TABULATEoptions; 例如: proc tabulatedata=clinic.admit; 其中,DATA=选项决定使用什么数据集。 4.设定变量 接下来,我们要设定使用数据集中那些变量来制作表格。在使用TABULATE过程步时,我们要区分两种变量: A.分类变量(Class Variables):用于对数据进行分组或归类。 B.分析变量(Analysis Variable):用于进行数值分析 1)定义分类变量 分类变量在CLASS语句中列出,其一般形式为: CLASS variables; 变量名之间用空格分开,可以不管顺序。 例如: class sex; 分类变量的特点: A.可以是字符型或数字型的,字符型变量字能作为分类变量 B.用于对数据进行分组或归类 C.一般只取较少的分列值(表格中会出现该变量取到的每一个值) 2)定义分析变量 分类变量在VAR语句中列出,其一般形式为: VAR variables; 变量名之间用空格分开,可以不管顺序。 例如: var age height weight; 分类变量的特点: A. 必须是数字型变量 B. 用于对统计分析 C. 通常可以取连续值(表格中往往只出现对该变量进行的一些统计分析结果) 3)表格中出现的变量 在表格中出现的变量会在TABLE语句中列出(TABLE语句用法见后),而在TABLE语句中用到的变量必须事先在CLASS语句或VAR语句中列出,并且只能在其中一个语句中列出,也就是说,一个变量,不可以既是分类变量,又是分析变量。 TABLE语句在TABULATE过程步中是必须的,而CLASS语句和VAR语句则至少要有一个。 5.在变量设定中可能发生的错误 1)有错误信息 如果在程序执行过程中,LOG窗口中出现错误信息,则根据出错信息做相应的修改。可能的出错信息有:
出错信息
含义 VARIABLE appears in bth CLASS and VAR lists
变量被定义为既是分类变量,又是分析变量。 Type of name (VARIABLE) unknown at line n
变量未在CLASS语句或VAR语句中定义 Variable VARIABLE in list does not match type prescribed for this list
字符型变量被定义为分析变量。
2)结果与期望不同 如果你得到的表格有很多行或列,而这并非你所预期的。那么检查一下CLASS语句,看你是不是把一个会取很多值的变量定义为分类变量了,如果这个变量是数字型变量的话,也许你应该将它定义为分析变量。 6.描述表格 定义完变量之后,就该用TABLE语句来描述你要制作的表格了。TABLE语句要设定: A.表格的维数 B.表格中出现的变量 C.要计算的统计量 1)TABLE语句的一般形式为: TABLEpage-expression, row-expression, column-expression /options; page-expression, row-expression, column-expression分别设定表格中页、行和列的元素(变量和统计量)。所有这些表达式(expressions)被统称为维表达式(dimension expressions) TABLE语句可以取以下三种基本形式:
TABLE语句 得到的表格 TABLE column-expression /options; 一维表格(只有列) TABLE row-expression, column-expression /options; 二维表格(有行和列) TABLE page-expression, row-expression, column-expression /options; 三维表格(有页、行和列)
可见,column-expression是必需的,也就是说,表格中列是一定有的。 维表达式包含元素和一些算符(operators),例如: tablemonth,mean*(height weight) mean*all; 算符是指表达式中的星号、括号和空格等符号,逗号也可视为一种算符,它用于分隔表格的维,TABLE语句中有两个逗号表示制作三维表格,TABLE语句中有一个逗号表示制作二维表格,TABLE语句中没有逗号表示制作一维表格。 2)例子 下面我们先从一些简单的例子来看,不同的TABLE语句能让我们得到什么样的表格。 A.用 table type; 得到:
TYPE I II N N 3.00 17.00
注: i. TYPE为数据集中一字符型变量名,它的值分别可取为‘I’和‘II’。它已被定义为分类变量。 ii.N是一个统计量,它表示某个变量出现某个取值的次数。上表表示,变量TYPE取值为‘I’共3次,取值为‘II’共17次。 iii. 表格中表格线用‘-’、‘|’、‘+’等表示。
B.用 table type premium; 得到:
TYPE
II I PREMIUM N N SUM 17.00 3.00 3359.15
注: i. PREMIUM为为数据集中一数字型变量名,它已被定义为分析变量。 ii.SUM是一个统计量,它表示某个变量所有观测值的和。上表表示,变量PREMIUM所有观测值的和为3359.15。
C.用 table type,premium; 得到:
PREMIUM
SUM TYPE
I 312.65 II 3046.50
上表表示,将数据集中所有观测按变量TYPE的取值分为两类,在变量TYPE的取值为‘I’的一类中,变量PREMIUM所有观测值的和为312.65;在变量TYPE的取值为‘II’的一类中,变量PREMIUM所有观测值的和为3046.50。
D.用 table type,premium,sum; 得到:
TYPE I
SUM PREMIUM 312.65
TYPE II
SUM PREMIUM 3046.50
3)设定统计量 你可以在维表达式中设定你想要的统计量,方法是用星号把统计量和变量连在一起。 例如: proc tabulatedata=clinic.admit; var fee; tablefee*mean; tablemean*fee; run; 可得:
FEE MEAN 124.67
MEAN FEE 124.67
关于设定统计量的一些规则: A.对分类变量,缺省的统计量是N(出现次数) B.对分类变量,可要求的统计量只有N和PCTN(出现次数的百分比) C.对分析变量,缺省的统计量是SUM(和) D.对分析变量,可要求计算任意统计量 E.若TABLE语句中有分析变量,则统计分析针对分析变量进行 F.统计量可以在任意维中设定,但只能在同一维中设定 例如: proc tabulatedata=clinic.admit; class sexactlevel; var heightweight; tableheight*mean weight*max,actlevel; table sex*pctnactlevel*n; run; 4)设定总和 你可以在TABLE语句中利用一个特别的分类变量ALL,得到总和。例如: proc tabulatedata=clinic.admit; var fee; class sex; table sexall,fee; run; 得到:
FEE
SUM SEX
F 76.90 M 201.70 ALL 278.60
注意,你不需要在CLASS语句中定义ALL。 7.与PRINT过程步中相同的一些选择和设置 1)选择观测 在TABULATE过程步中,你也可以用WHERE语句来选择观测,用法与在PRINT过程步中一样。 2)题注为尾注 在TABULATE过程步中,你也可以用TITLE和FOOTNOTE语句来设定题注为尾注,用法与在PRINT过程步中一样。 3)给变量设定描述性标记 在TABULATE过程步中,你也可以用LABEL给变量设定描述性标记,用法与在PRINT过程步中一样。 8.设定统计量的标记 除了可以给数据集中的变量设定描述性标记之外,还可以给统计量设定描述性标记,比如说,你希望计算出来的均值在表格中用‘Average’表示,而不是‘MEAN’,用KEYLABEL语句可以完成这项工作。KEYLABEL语句的一般形式为: KEYLABELkeyword='text'; 其中keyword是对应一个统计量的关键词,包括: N MEAN MIN PCTN SUM MAX STD PCTSUM 引号中的text是对该统计量设定的描述性标记,可长达40个字符。 另外,特殊的分类变量ALL也可作为keyword在LEYLABEL语句中使用,以获得一个描述性标记。 例如: keylabel mean='Average' all='All Patients'; 9.设定表格的格式 最后,我们可以做的是设定表格的宽度和统计数据的显示格式。其缺省设置是12.2,也就是说,表格中每一格宽度为12,其中的统计数据显示小数点后2位。 在许多其他过程步中,你可以用FORMAT语句设定书记处显示格式,但是在TABULATE过程步中,仅仅对给分类变量设定用户自定义格式起作用,因此要另想办法。 你可以在PROC TABULATE语句中用FORMAT=选项对表格中所有单元设定新的格式,例如: proc tabulatedata=clinic.admit format=6. class actlevel; var fee; table actlevelall,fee; run; FORMAT=选项同时设定表格单元的宽度和其中数据的显示格式。你可以任意设定一个SAS输出格式或用户定义的数字格式。 当使用FORMAT=选项时,要注意对出现的值或标题给予足够的宽度。 10. 其它 1)空格算符和括号算符 在维表达式中,用空格表示两个变量在同一维中并列,而用括号表示将括号中的变量看作一组。例如: table height*meanweight*mean,sex all; table type*(sexall); 分别会得到:
SEX
F M ALL HEIGHT MEAN 64.82 72.00 68.24 WEIGHT MEAN 141.73 172.8 156.52
TYPE I II SEX
SEX
F M ALL F M ALL N N N N N N 1 2 3 10 7 17
2)复杂结构 连用星号会得到一个结构比较复杂的表格,例如: tablesex,actlevel*age*max;
ACTLEVEL
HIGH LOW MOD
AGE AGE AGE
MAX MAX MAX SEX
F 44.00 49.00 43.00 M 29.00 60.00 54.00
3)CONDENSE选项 当制作三维表格时,表示在若干页上建立二维表格,但如果你希望这些表格出现在同一页上的话,可在TABLE语句中使用CONDENSE选项。例如: tabletype,premium,sum /condense;
三.练习
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |