三、 使用输出交付系统(ods)增强输出
1. 追踪和选择过程步输出结果
ods trace语句:
ods trace on; #打开追踪
你要追踪的proc步;
run;
ods trace off; #关闭追踪
ods select语句:
你要选择的proc步;
ods select output-object-list; #output-object-list可以是输出对象的名字、标签、路径,如果是多个输出对象,用空格分开。
run;
例:Big Zac ,red,80,5,Delicious,red,80,3
Dinner Plate,red,90,2,Goliath,red,85,1.5
Mega Tom ,red,80,2,Mortgage Lifter,red,85,2
Big Rainbow ,yellow,90,1.5,Pineapple,yellow,85,2
要求:变量为name,color,days,weight。按color分组,输出第二个color的结果。
结果(在日志里):
可以看到第二个输出对象的路径是means.bygroup2.summary。于是:
结果:
2. 从过程步输出中创建sas数据集
通过ods,将输出结果发送到output输出目标,几乎可以将过程步生成的任何输出保存到sas数据集。首先需要使用ods trace语句获得需要的输出对象名,然后使用ods output语句将输出对象发送到输出目标。
ods output语句:
ods output output-object = new-data-set;
#其中output-object可以是想要保存的输出对象的名字、标签、路径 。new-data-set是要创建的sas数据集名字。
例:Big Zac ,red,80,5,Delicious,red,80,3
Dinner Plate,red,90,2,Goliath,red,85,1.5
Mega Tom ,red,80,2,Mortgage Lifter,red,85,2
Big Rainbow ,yellow,90,1.5,Pineapple,yellow,85,2
要求:变量为name,color,days,weight。追踪proc tabulate。
tabulate过程生成了一个名为Table的输出对象:
用ods output创建新的数据集tabout并打印出来:
但是这个表格的格式我有点没看懂。
3. 创建文本、HTML、RTF、PDF输出
几个主要的输出目标:
3.1 创建文本输出
两种方式:
(1)在sas中打开工具—选项—参数选择,单击结果选项卡,勾选“创建列表”。sas会将输出结果发送至listing,直到手动关闭。
(2)ods语句。
ods listing; #这句要放在第一行
若要指定放在某文件里,则在后面加上file=‘文件路径’
例:beluga,whale,15,dwarf,shark,0.5,basking,shark,30,humback,whale,50
whale,shark,40,blue,whale,100,killer,whale,30,mako,shark,12
要求:变量为name,family,length。proc means。创建文本输出。
在输出中输出的结果:
在结果查看器中输出的结果:
若要删除过程步标题,如本例的means procedure,则加入ods noproctitle:
结果:
*我在指定文件中输出后,文件存在了,但打不开:
3.2 创建HTML输出
ods语句:
ods html body=‘body-filename.html’ options;
file=与body=具有相同的作用。生成的正文文件包括结果内容。其他常用的选项包括:
如:ods html file=‘afgiwgf.html’ barrettsblue;指定了HTML输出目标,将结果不存在这个文件中,并采用barrettsblue样式。
关闭HTML输出目标,将下面语句放在需要捕获的输出过程步之后,并紧跟在run后面。
ods html close;
例:beluga,whale,15,dwarf,shark,0.5,basking,shark,30,humback,whale,50
whale,shark,40,blue,whale,100,killer,whale,30,mako,shark,12
要求:变量为name,family,length。proc means。创建HTML输出,样式为d3d,要输出结果、目录和框架。
在sas的结果查看器中:
同时在指定的文件中生成了对应的结果文件、目录文件和框架文件:
默认浏览器打开:
3.3 创建RTF(Rich Text Format)输出
创建一个人RTF文件后,可复制到word中,像操作word表格一样。ods语句与html输出类似,不同的是,rtf只有一个输出文件,该文件包含所有结果内容,常用的选项如下:
例:beluga,whale,15,dwarf,shark,0.5,basking,shark,30,humback,whale,50
whale,shark,40,blue,whale,100,killer,whale,30,mako,shark,12
要求:变量为name,family,length。proc means。创建RTF输出,bodytitle,startpage为no。
ods rtf file='E:\SAS\sss\sas数据\第5章\5.6shark.rtf'
bodytitle startpage=no;
ods noproctitle;
data shark;
infile 'E:\SAS\sss\sas数据\第5章\5.4鲨鱼\5.4鲨鱼.csv\' dlm=',';
input name $ family $ length @@;
run;
proc means maxdec=0;
class family;
var length;
run;
ods rtf close;
在敲代码时我发现三点:
- 上节中的5.5shark.html等三个文件是我在电脑的文件夹中新建的空文件,这节中的5.6shark.rtf不是电脑里的空文件,而是sas自己建的,说明文件不需要事先建,sas在运行代码输出结果时自己建。
- sort和by的组合,与class语句作用差不多,但结果不一样,如下。
- 最后的输出结果没有在sas的结果查看器中显示,而是直接生成了rtf文件并打开。
先排序再用by的输出结果:
class分组的结果:
3.3 创建PDF输出
PDF输出目标会创建一个PDF输出。类似于rtf输出,只产生一个文件,可用的选项包括:
例:beluga,whale,15,dwarf,shark,0.5,basking,shark,30,humback,whale,50
whale,shark,40,blue,whale,100,killer,whale,30,mako,shark,12
要求:变量为name,family,length。proc means。创建PDF输出,样式为sansprinter。
结果(也是sas新建的pdf并直接打开):
4. 自定义标题和脚注
在ods输出中,样式模板指定标题和脚注的显示,但也可以在title语句和footnote语句中,插入一些简单选项改变标题和脚注的显示。
title语句和footnote语句的一般形式为:
option之间没有逗号,用空格分开。常用选项:
just= #设定对齐方式
fontground= #设定文本的字体颜色
color= 选项用于设定文本的颜色,颜色的名字如果超过8个字符或含有嵌套空格,需要用引号引起来;以#开头的RGB十六进制代码也要用引号引起来。
bcolor= 选项用于指定文本的背景颜色,其可设定的颜色范围与color=选项的一样。
height= 用于指定文本的高度,其值为一个数值,单位可以是PT、IN或CM。
justify= 用于指定文本的对齐方式,有left、center、right三种选择。
font= 可指定文本的字体。
bold=与italic&#