数据汇总与报表制作Word格式文档下载.docx
《数据汇总与报表制作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据汇总与报表制作Word格式文档下载.docx(58页珍藏版)》请在冰点文库上搜索。
为了实现对观测的选择,也可使用PRINT的如下选项
FIRSTOBS=和OBS=;
注意,该选项必须放在括号中,但是NOOBS选项绝不能带括号!
程序如080a.sas所示。
procprintdata=dst.bclass(firstobs=1obs=5);
结果见下。
5.SUM语句
SUM变量1变量2……;
对输出的数值变量计算其总和。
程序见081.sas所示。
sumboardedrevenue;
结果如下:
6.BY语句
BY语句即分组小计。
在较大的数据集的报表中,不仅要对某些变量计算它的总和,还常需要分组计算它的小计。
例如对数据集dst.lonpar,可以按航班计算总乘客人数,也可按日期计算总乘客人数。
要在过程PRINT中实现这一点只要在过程步中加入BY语句,它的形式为
BY变量1变量2……;
加入BY语句,SUM语句的求和功能就是按BY变量的值交叉分组后,计算每个组内指定变量的合计,同时也计算总和。
和其它过程一样,过程PRINT中使用了BY语句,就要求读入的数据集必须是按BY变量排序的。
若原数据集尚未按BY变量排序,可先用过程SORT对数据集进行排序。
程序如082.sas;
procsortdata=dst.airlineout=sorted;
byflight;
procprintdata=sorted;
varflightdatedestboarded;
sumboarded;
另一个程序如083.sas;
procsortdata=dst.bclassout=sorted;
bysexage;
varsexageheightweight;
sumheightweight;
7.PAGEBY语句
在使用了BY语句后,可以使用PAGEBY语句。
注意:
要使用PAGEBY语句,必须先使用BY语句!
一般形式为
PAGEBY变量名;
该语句仅允许指定一个变量!
该语句的作用是将指定的这个变量的各个不同值在不同的页面上输出。
程序见084.sas;
byagesex;
varagesexheightweight;
pagebyage;
该程序将按age的不同取值在不同的页输出。
8.总结
过程PRINT的一般形式为
PROCPRINTDATA=数据集名<
选项>
ID变量1变量2……;
VAR变量1变量2……;
SUM变量1变量2……;
BY变量1变量2……;
PAGEBY变量;
RUN;
过程PRINT中的各个语句的次序并不重要,可以任意改变次序。
二、改进列表报告
(一)标题和脚注
TITLEn‘标题字符’;
FOOTNOTEn‘脚注字符’;
该语句具有以下特点:
1.n的取值范围从1到10;
2.标题出现在每页的顶部;
3.脚注出现在每页的底部;
4.如果没有定义标题,缺省的标题是‘TheSasSystem’;
5.如果没有定义脚注,脚注就不出现;
6.没有n的TITLE和FOOTNOTE语句分别等于TITLE1和FOOTNOTE1;
7.标题和脚注语句可以写在PROC语句之前,也可写在过程步之中。
程序见085.sas;
optionspagesize=20linesize=132;
title1'
Class1ofStatistics'
title2'
NorthChinaUniversityofTechnology'
footnote1'
PreparedJan19,2007'
footnote2'
BytheDean'
procprintdata=sasuser.class(firstobs=1obs=5);
这两个语句均是全局语句。
即
1.可以置于数据步与程序步之外;
2.若设定则一直有效,直至新的TITLE语句,FOOTNOTE语句执行后改变其设定或SAS进程结束;
3.替代了原先同样号码的标题或脚注;
4.取消拥有更大号码的标题或脚注;
5.使用以下两个简单语句,可以取消所有的标题和脚注:
title;
footnote;
程序见086.sas。
Beijing'
(二)LABEL选项
该选项是PRINT过程的选项,一般用法如下:
PROCPRINTDATA=SAS-DATASET<
label>
作用为用标签名而不是变量名输出结果。
程序如087.sas所示。
procprintdata=sasuser.classlabel;
而不加label的输出结果为:
(三)LABEL语句
如果数据集中的变量尚未规定标签,或者要使用不同于数据集中已有的标签,则可以在过程PRINT的过程步中加入LABEL语句,规定各变量的标签,这时再使用选项LABEL就可使用变量的这一新定义的标签了。
LABEL语句的一般形式为:
LABEL变量1=‘标签字符’变量2=‘标签字符’……;
其中标签字符的长度不得超过256个字符。
程序如088.sas所示。
procprintdata=dst.bclasslabel;
labelname='
NameofStudentinNorthChinaUnviersityofTechnology'
有时变量的标签包含较多的字符(如上例),系统会将标签分成几行,但系统分隔标签无法考虑其含义,为了控制标签的分行,可以在允许分行处加入分隔符,然后在PRINT语句中用以下选项指明分隔符:
SPLIT=‘分隔符’;
程序见089.sas。
procprintdata=dst.bclasslabelsplit='
'
NameofStudentin,NorthChinaUnviersityofTechnology'
对比可以看出这两个输出结果的差异。
当然可以使用中文标签。
程序见090.sas所示。
学生姓名'
(四)FORMAT语句
过程PRINT输出的数据内容中,若数据集中对变量已经规定了输出格式,则输出的该变量的值都使用规定的输出格式。
如果数据集中变量尚未规定输出格式,也可以在过程步中用FORMAT语句为变量指定输出格式,在输出时就采用指定的输出格式。
如数据集dst.airline规定date变量的输出格式为mmddyy8.,则运行程序091.sas,输出结果如下:
procprintdata=dst.airline(firstobs=1obs=10);
vardate;
使用FORMAT语句,编制程序092.sas如下所示。
formatdatedate9.;
输出结果如下:
在输出中除了使用系统提供的各种现成的输出格式外,还可使用用户自定义的各种格式(稍后介绍)。
(五)SAS系统的选项
在SAS进程中有两种方法可以修改选项,提交OPTIONS语句和在交互操作中进入OPINIONS窗口操作。
其中交互操作的菜单如下:
下面介绍OPTIONS语句。
该语句的一般形式为
OPTIONS选项1选项2……;
以下的系统选项与过程PRINT输出结果的形式有关。
CENTER(NOCENTER)
输出的内容居中(靠左对齐),缺省为居中。
DATE(NODATE)
在每个输出页的右上侧加入(不加入)进程开始的日期和时间,缺省为加入日期和时间。
NUMBER(NONUMBER)
在每个输出页加入(不加入)页码。
缺省为加入页码。
PAGENO=n
将输出页码从n开始计数,缺省的是n=1。
LINESIZE=列数
输出的每一行可包含的最大字符数,缺省为96。
PAGESIZE=行数
输出的每一页可包含的最大行数,缺省为54。
程序如093.sas所示。
optionsnocenternodatenonumber;
三、使用菜单实现数据集列表输出
首先在分析员应用程序中打开一个数据集,然后点击下列菜单:
打开对话框
利用下方的三个按钮进行设置即可。
四、过程PRINTTO
过程PRINT的输出都存放在OUTPUT窗口之中。
若需要保存结果,可以在菜单中选择saveas…将结果存入指定的文件。
SAS也提供另一种方法,即使用过程PRINTTO,它可将过程的输出结果和运行中的LOG信息按原有的形式分别以文本文件的格式存入指定的文件中。
使用过程PRINTTO的语句形式为:
PROCPRINTTO<
PRINT=’文件1’>
<
LOG=’文件2’>
NEW>
;
运行上述程序后,并没有直接的输出结果,但在它之后运行的过程,其输出结果将自动依次分别存入文件1(output窗口的结果)和文件2(log窗口的结果)。
若提交的指示以下的语句:
PROCPRINTTO;
则将解除原来将输出结果和运行信息存入文件的设定,恢复将输出结果存入OUTPUT窗口,LOG信息存入LOG窗口。
程序如094.sas所示。
procprinttoprint='
d:
\tempoutput.txt'
log='
\templog.txt'
procprintdata=dst.bclass;
运行上述程序后,将以后运行的过程的结果依次记入上述两个文件。
若希望每一个程序运行的结果单独存放,即清除以前程序运行存入的结果,应该在PRINTTO中加入选项NEW。
程序如095.sas所示。
new;
五、过程FORMAT
实际当中经常需要给变量值写标签,如:
又如
再如
因此需要使用自定义格式。
过程FORMAT用于自定义输出格式。
一般形式为:
PROCFORMAT;
VALUE格式名范围1=‘标签1’范围2=‘标签2’……;
RUN;
其中,
格式名是长度不超过8个字符的SAS名,但不能以数字结尾,也不能与已有的输出格式名重名。
若定义的是字符型的输出格式,则需要加上美元符号$。
包含美元符号在内,格式名的长度不超过8个字符。
在应用格式名时,$是格式名的一部分,不能与格式名分开书写!
在VALUE语句中提及格式名时绝不能加句点。
自定义的输出格式和系统提供的输出格式在调用形式上是一样的。
如程序096.sas所示。
procformat;
valuegender1='
female'
2='
male'
other='
miscoded'
datatemp;
inputname$1-3sex5;
cards;
aaa1
bbb2
ccc1
ddd1
eee2
fff
procprint;
formatsexgender.;
other表示在列举范围之外的所有值(不论是字符型的还是数字型的变量),(本例中即为除1和2之外的所有值),包括缺失值,是系统默认的名字。
如果在上述程序中将other写成了others,则在LOG窗口会出现绿色字体。
如下所示。
绿色字体表示,虽然书写错误,但不影响结果的输出。
正确的结果如下所示。
如程序097.sas所示。
valuehhhlow-140='
low'
140-160='
average'
160-high='
aboveaverage'
inputname$1-3height5-7;
aaa125
bbb135
ccc145
ddd150
eee157
fff176
formatheighthhh.;
在上述规定数值变量的范围时,low表示最小值,但不含有缺失值,high表示最大的数值。
如程序098.sas所示。
value$gradeA='
best'
B='
better'
C='
good'
inputname$1-3marks$5;
aaaA
bbbA
cccB
dddC
eeee
fffC
formatmarks$grade.;
此处千万注意,在应用格式时,$是格式名的一部分,绝不能与格式名之间有空格!
也可使用汉语标签,如程序099.sas所示。
女'
男'
编码错误'
第二节频数与描述统计量的计算
一、频数及百分数的计算
(一)过程FREQ的一般用法
PROCFREQ<
DATA=数据集>
过程FREQ的上述用法将对数据集中的所有变量列出它们的频数、百分数、累计频数和累计百分数。
程序如100.sas所示。
procfreqdata=sasuser.class;
为了对选择的变量进行其取值的频数统计,只需在过程步中加入TABLE语句,其形式为
TABLE变量1变量2……;
程序如101.sas所示。
tablesexage;
(二)TABLE的选项NOCUM和NOPERCENT
NOCUM表示去掉累计值;
NOPERCENT表示去掉百分数。
程序如102.sas所示。
tablesexage/nocum;
程序如103.sas所示。
tablesexage/nopercent;
程序如104.sas所示。
tablesexage/nocumnopercent;
对于有缺失值的数据集dst.airline,程序如105.sas,结果如下所示。
procfreqdata=dst.airline;
tabledest;
即除掉缺失值,共有634条记录。
上述输出说明,在统计频数时没有将有缺失值的记录统计在内。
如果要将取缺失值的记录也作为一类,则可以在TABLE语句中使用选项MISSING。
程序如106.sas,
易知共有635条记录。
第一类为确实值形成的。
(三)FORMAT语句
一般形式:
FORMAT变量1变量2……;
若在数据集中对变量已经规定了输出格式,则过程FREQ在计算此变量的取值频数时,自动按输出格式的值计算频数。
程序如107.sas(在格式定义中加引号)。
small'
medium'
tall'
procfreqdata=dst.bclass;
tableheight;
在格式定义中均没有加引号的程序如108.sas所示。
valuehhhlow-140=small140-160=medium160-high=tall;
选项
(四)选项ORDER=
这是FREQ的选项。
ORDER=DATA|FORMATTED|FREQ|INTERNAL
DATA:
按数据集中数据值出现的次序排列。
见109.sas。
FORMATTED:
按数据输出格式值的次序排列。
见110.sas。
FREQ:
按频数的降序排列。
见111.sas。
INTERNAL:
按数据值的次序排列,这是缺省的情况。
见112.sas。
程序如109.sas所示。
procfreqdata=dst.bclassorder=data;
tableage;
程序如110.sas所示。
procfreqorder=formatted;
程序如111.sas所示。
procfreqdata=dst.bclassorder=freq;
程序如112.sas所示。
这是缺省的情况
procfreqdata=dst.bclassorder=internal;
(五)选项OUT=
上面使用过程FREQ时,其结果都直接在OUTPUT窗口显示频数统计的结果。
有时需要保存或用SAS对其作进一步的加工,这时需要将频数统计结果直接存入SAS数据集。
过程FREQ的TABLE语句的选项OUT=就是用于指明统计结果存入SAS数据集的。
它的形式为:
TABLE变量列/OUT=数据集名;
程序见113.sas所示。
tableage/out=temp;
当分析结果存入数据集后,也可能不必再在OUTPUT窗口中显示类似的结果,这时只要在过程语句加入选项NOPRINT,提交程序后就不在OUTPUT窗口中显示频数统计的结果。
程序见114.sas所示。
procfreqdata=dst.bclassnoprint;
则只有上述第二个结果。
(六)WEIGHT语句
WEIGHT变量名;
程序见115.sas所示。
procfreqdata=temp;
weightcount;
结果同上述第一个表。
(七)多个变量交叉分类频数计算