The little SAS book 学习笔记
第五章 用ODS增强你的输出结果
5.1 ODS(Output Delivery System)的概念
过程步不会产生输出,它只会产生数据,然后把数据发送给ODS,以决定输出的样式等。所以,不要考虑是否使用ODS,而考虑怎么使用,是接受默认输出还是改变设置。
ODS就像一家商务飞机,游客乘坐car和bus赶来,在机场确认行李、安检、最终登机,飞往目的地。ODS中,数据就像游客,通过各种过程步而来,ODS处理每一个数据集并发送到目的地。实际上,不同的ODS类型就是目的地,当达到目的地时,数据的样式是由模板决定。模板是一个告诉ODS如何格式化您的数据的指令集。目的地和模板这两个概念的是你了解可以用ODS做什么的基础。
目的地 如果没有指定目的地,那么你的数据默认发往“列表listing”,这里有几种可
选的目的地:
LISTING 标准SAS输出
Output SAS输出数据集 Html 超文本标记语言 RTF 富文本格式
PRINTER 高分辨率的打印机输出(PS, PCL, and PD) PS 附言
PCL Printer Control Language 打印机控制语言 PDF Portable Document Format
MARKUP markup languages including XML DOCUMENT output document
风格和表模板 模板描述ODS如何制定数据格式并呈现数据。最普通的两个模板类
型和是表模板类型和风格模板类型。表模板类型制定基本的输出结构,而风格模板类型制定输出将如何呈现。ODS将过程产生的数据和表模板结合成输出对象,输出对象接着与风格模板结合,并发送到目的地,创建输出。
可以使用template过程创建自己的风格模板,但proc template过程晦涩难懂。幸运的是,有一个最简单和最快速的方法控制修改输出,即使用内置风格模板。可用proc template语句来访问内置模板:
PROC TEMPLATE;
LIST STYLES;
RUN;
一些内置模板如下:
注意RTF和PRINTER既是目的地名又是风格名。DEFAULT是HTML的默认风格,RTF是RTF输出的默认风格,PRINTER是PRINTER的默认风格。
Print、report、TABULATE三个过程中,可以使用style=option来直接控制输出特征,而不需要创建一个新的模板。
5.2 追踪选择过程的输出
当ODS接受来自过程步的数据时,它将数据与表模板结合。对应的表模板和数据就叫做输出对象。如果使用by语句,SAS会为每一个BY组产生一个输出对象。每一个输出对象都有名字,可以用ODS TRACE语句来查找,并用ODS SELECT语句来选择。
ODS TRACE语句 ODS TRACE语句告诉SAS打印出SAS日志中输出对象的信息。
这里有两个ODS TRACE的语句,一个是打开trace,一个是关闭。使用方法实例如下:
注意关闭语句要在run后面,否则在程序运行之前就关闭了trace。
例子 有关于番茄种类的数据,包括每种番茄的名字、颜色、从播种到收获的天数、典
型重量:
下面代码创建了一个名为giant的数据集,并使用ODS TRACE ON和ODS TRACE OFF语句来追踪proc means过程。
程序运行后,日志窗口中就会有如下的追踪(由于使用了BY语句,故按照BY的组来追踪):
ODS select语句 知道输出对象的名字之后,可以用ODS SELECT语句来选择需要的
输出对象。基本形式为:
Output-object-list是名字、标签、一个或更多的输出对象的路径。
例子 下面代码对giant运行了proc means,并用ODS SELECT语句选择了第一个输出
对象,mean:
输出结果为:
5.3 从过程输出中创建SAS数据集
有时需要把一个过程的结果弄到SAS数据集中,有的过程用output或out=实现。但用ODS,可以储存从过程输出的任何一部分。首先要使用ODS TRACE语句决定选择输出对象名。然后使用ODS OUTPUT语句将输出对象发送到OUTPUT目的地中。
ODS OUTPUT语句 基本形式为:
ODS OUTPUT output-object=new-data-set;
这个语句不属于数据步和过程步。ODS OUTPUT打开SAS数据集并等待正确的过程输出,数据集保持开放,直到过程步的结尾。因为ODS OUTPUT是立即执行的,它将应用于proc正在处理的数据,或者应用于下一个proc(如果目前没有proc)。为确保得到正确的输出,建议将ODS OUTPUT语句放在PROC语句之后,下一个PROC 、DATA或RUN语句之前。
例子 仍然是关于番茄的数据:
下面是引用与SAS日志,显示由proc tabulate产生的追踪(trace),tabulate产生一个叫做table的输出:
下面的代码读取数据、使用ODS OUTPUT语句来创建叫做TABOUT(来自TABLE输出对象)的SAS数据集,然后用proc print打印出新数据集。
有两部分输出结果,第一部分是标准tabular结果,有proc tabulate产生。下面是TABOUT数据集,由ODS OUTPUT语句产生,并有proc print打印。
5.4 使用ODS语句创建HTML输出
将输出发送到HTML目的地,将得到HTML格式的文件。这个文件也可以被读入spreadsheets,甚至被打印或导入到文字处理软件中(有些格式会发生变化)。总之,产生一个HTML文件只需两步语句——打开HTML文件、关闭。
ODS语句 将输出发送到HTML目的地,使用ODS HTML语句,基本形式为:
ODS HTML BODY='body-filename.html' options;
Option是用来改变HTML的类型(contents,page,or frame),