前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SAS Says】基础篇:4. ODS的使用

【SAS Says】基础篇:4. ODS的使用

作者头像
数说君
发布2018-04-08 11:42:14
4.3K0
发布2018-04-08 11:42:14
举报
文章被收录于专栏:数说工作室数说工作室

你不可能总是在SAS上查看结果,如果结果很多你要一一的讲结果复制到word中去,有ODS就好啦!它可以把SAS的结果直接输出到word、PDF等文件中。

并且,你还要在这些文件中定制字体、背景、颜色...

4.1 ODC的概念

4.2 追踪选择过程的输出

4.3 从过程输出中创建SAS数据集

4.4 使用ODS语句创建HTML输出

4.5 使用ODS语句创建RTF输出

4.6 使用ODS语句创建printer输出

4.7 定制标题和注脚

4.8 用style=option定制proc print输出

4.9 用style=option定制proc report输出

4.10 用style=option定制proc tabulate输出

4.11 为你的输出增加交通信号灯

4.12 选择风格属性


【SAS Says】基础篇:4. ODS的使用

4.1 ODC的概念

过程步把数据发送给ODC,以决定输出的样式等。

ODC就像一家商务飞机,游客乘坐car和bus赶来,在机场确认行李、安检、最终登机,飞往目的地。Ods中,数据就像游客,通过各种过程步而来,ODS处理每一个数据集并发送到目的地。实际上,不同的ODS类型就是目的地,当达到目的地时,而数据的样式是由模板决定。

目的地 如果没有指定目的地,那么你的数据默认发往“列表listing”,这里有几种可选的目的地

  • LISTING 标准SAS输出
  • Output SAS输出数据集
  • Html 超文本标记语言
  • RTF 富文本格式
  • PRINTER high resolution printer output
  • PS 附言
  • PCT Printer Control Language
  • PDF、MARKUP、DOCUMENT
  • 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来直接控制输出特征,而不需要创建一个新的模板。

4.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:

输出结果为:

4.3 从过程输出中创建SAS数据集

有时需要把一个过程的结果弄到SAS数据集中,有的过程用output或out=实现。但用ODS,可以储存从过程输出的任何一部分。首先要使用ODS TRACE语句决定选择输出对象名。然后使用ODS OUTPUT语句将输出对象发送到OUTPUT目的地中。

ODS OUTPUT语句 基本形式为:

ODS OUTPUT output-object=new-data-set;

这个语句不属于数据步和过程步。ODSOUTPUT打开SAS数据集并等待正确的过程输出,数据集保持开放,直到过程步的结尾。因为ODS OUTPUT是立即执行的,它将应用于proc正在处理的数据,或者应用于下一个proc(如果目前没有proc)。为确保得到正确的输出,建议将ODS OUTPUT语句放在PROC语句之后,下一个PROC 、DATA或RUN语句之前。

例子 仍然是关于番茄的数据:

下面是引用与SAS日志,显示由proc tabulate产生的追踪(trace),tabulate产生一个叫做table的输出:

下面的代码读取数据、使用ODSOUTPUT语句来创建叫做TABOUT(来自TABLE输出对象)的SAS数据集,然后用proc print打印出新数据集。

有两部分输出结果,第一部分是标准tabular结果,有proc tabulate产生。下面是TABOUT数据集,由ODS OUTPUT语句产生,并有proc print打印。

4.4 使用ODS语句创建HTML输出

将输出发送到HTML目的地,将得到HTML格式的文件。这个文件也可以被读入spreadsheets,甚至被打印或导入到文字处理软件中(有些格式会发生变化)。总之,产生一个HTML文件只需两步语句——打开HTML文件、关闭。

ODS语句 将输出发送到HTML目的地,使用ODS HTML语句,基本形式为:

ODS HTML BODY='body-filename.html' options;

Option是用来改变HTML的类型(contents,page,orframe),

  • Contents= contents文件是一个链接到主体文件的一个目录表,它将会列出输出的每个部分,点击表中某个条目,相关输出会出现。
  • Page= page文件类似于contents文件,不同的是,contents通过标签列出输出的每个部分,而page文件通过页码列出。
  • Frame= frame允许同时访问在不同区域、框架或浏览器窗口中,访问主体文件、contents文件和page文件。
  • Style= 这个选项允许指定一个风格模板,默认的模板名为default。

下面的语句告诉SAS发送一个输出给HTML目的地,储存一个名为AnnualReport.html的主体文件,并使用D3D风格。

ODS HTML BODY='AnnualReport.html' STYLE=D3D;

ODS 语句不属于数据步也不属于过程步,摆放它的好位置是proc过程步之前,这个过程步的输出正是你希望捕捉的。

关闭HTML文件的ODS语句为:

ODS HTML CLOSE;

将这个语句放在proc之后,接在 run语句之后。

例子 下面的数据是关于选择的鲸鱼或鲨鱼的平均长度(英尺)

下面的代码创建了两个输出,一个是来自means过程,一个来自print过程。并且有两个ODS语句,一个创建了四个HTML文件:body,contents,page,andframe,一个是关闭HTML文件。

输出结果如下:

4.5 使用ODS语句创建RTF输出

当你创建了富文本格式,可以将其发送到word中,并像word表格一样编辑修改。语句与HTML语句差不多,区别在于option:

ODS语句 ODS打开RTF文件的基本形式为:

ODS RTF FILE='filename.rtf' options;

不像HTML,RTF文件只有一种类型,一些option如下:

  • COLUMNS=n 要求一个柱状输出,n是第几列。
  • Bodytitle
  • Sasdate 这个选项告诉SAS当前的SAS会话开始运行时,使用日期和时间。
  • Style= 指定一个风格模板

下面的代码告诉SAS将输出发送到RTF目的地,储存一个名为AnnualReport.rtf的主体文件,并使用FANCYPRINTER风格。

ODS RTF FILE='AnnualReport.rtf' STYLE=FANCYPRINTER;

放置这个代码的较好位置也是在proc之前,而关闭语句也是放置在proc语句之后,接在run之后。

ODS RTF CLOSE;

例子 仍然是鲸鱼和鲨鱼平均重量的数据:

如下的代码从means和print中产生输出,程序中有两个ODS语句,一个打开RTF文件,一个关闭RTF文件。

Marine.RTF文件在word中的结果如下,每一部分的输出结果在不同页面中出现:

4.6 使用ODS创建printer输出

ODS语句 打开printer目的地的ODS语句最基本形式为:

ODS PRINTER;

如果使用这个简单的语句,SAS将创建你先在系统需要的输出类型,并自动打印输出,而不是储存文件。可以用add=option来储存输出。类似RTF,只有一种PRINTER类型文件。创建指定的输出类型的基本形式如下面几种:

  • Default printer: ODSPRINTER FILE='filename.extension'options;
  • PCL: ODS PCL FILE='filename.pcl'options;
  • PDF: ODS PDFFILE='filename.pdf'options;
  • PostScript: ODS PSFILE='filename.ps'options;

目的地一些有效的选项如下

  • COLUMNS=n 要求一个柱状输出,n是第几列。
  • STYLE= 指定一个风格模板

下面的代码告诉SAS创建PostScriptoutput,将结果存在AnnualReport.ps中,并使用FANCYPRINTER风格。

ODS PS FILE='AnnualReport.ps' STYLE=FANCYPRINTER;

放置它的位置也是在proc之前。关闭一个printer文件 ODS语句基本形式为;

ODS destination-name CLOSE;

destination-name可能是PRINTER,PCL,PDF,或者 PS,视开启语句中的目的地而定。放置在proc的run语句之后。

例子 仍然是鲸鱼和鲨鱼平均重量的数据:

如下的代码从means和print中产生输出,程序中有两个ODS语句,一个打开PDF文件,一个关闭PDF文件。

在Adobe Acrobat中的输出结果如下,每一部分的输出结果在不同页面中出现:

4.7 定制标题和注脚

通过在在title和footnote语句中插入一个简单的选项,可以改变注脚和标题的样式,title和footnote语句的基本形式为:

TITLE options 'text-string-1' options 'text-string-2'…options 'text-string-n';

FOOTNOTE options 'text-string-1' options 'text-string-2 '…options'text-string-n';

可以将一段文字分成不同的部分,每个部分应用不同的样式,可以选择的主要选项如下表:

  • COLOR= 为文本指定一种颜色
  • BCOLOR= 为背景指定一种颜色
  • HEIGHT= 为文本指定高度
  • JUSTIFY= 要求对齐
  • Font= 为文本指定字体
  • Bold 粗体
  • ITALIC 斜体

颜色 为一段文本不同部分指定不同的颜色

TITLE COLOR=BLACK 'Black' COLOR=GRAY 'Gray' COLOR=LTGRAY 'LightGray';

显示为:

SAS支持几百种颜色,但有的不能被web等识别,所以安全的颜色为: BLACK,BLUE,BROWN,CHARCOAL,CREAM,CYAN,GOLD,GRAY,GREEN,LILAC,LIME,MAGENTA,MAROON,OLIVE,ORANGE,PINK,PURPLE,RED,ROSE,SALMON,STEEL,TAN,VIOLET,WHITE,andYELLOW.

背景颜色 下面是用十六进制码来指定背景颜色:

TITLE BCOLOR='#C0C0C0' 'This Title Has a Gray Background';

显示为:

高度 下面设置高度:

TITLE HEIGHT=12pt 'Small' HEIGHT=.25in 'Medium' HEIGHT=1cm 'Large';

单位分别为像素、英尺、厘米,显示为:

对齐 下面分别设置左对齐、居中、右对齐:

TITLE JUSTIFY=LEFT 'Left' JUSTIFY=CENTER 'vs.' JUSTIFY=RIGHT 'Right';

显示为:

字体示例:

TITLE 'Default' FONT=Arial'Arial'

FONT='Times NewRoman' 'Times New Roman' FONT=Courier'Courier';

显示为:

加粗与斜体 默认下,标题是加粗且斜体的。关闭粗体和斜体要用FONT=option,示例:

TITLEFONT=Courier'Courier'

BOLD'Bold'BOLDITALIC'Bold and Italic';

显示为:

4.8 用style=option定制proc print输出

用ODS中的style=option可以改变输出的整体外观,但是如果要只改变头部,或者其中一列,要在print、report和tabulate过程中用style=option。

Proc print语句中使用Style=option的基本形式为:

PROC PRINT STYLE(location-list)={style-attribute=value};

location-list说明了表中的哪一部分将应用风格,style-attribute是要改变的风格属性,value是属性值。下面的代码将data部分的background属性设为pink:

PROC PRINT STYLE(DATA)={BACKGROUND=pink};

下面是可以指定改变风格的部分:

  • DATA 所有的数据单元
  • HEADER 列标题(变量名)
  • OBS OBS列,或者ID列(如果使用ID语句)的数据
  • OBSHEADER OBS列或ID列的标题
  • TOTAL 有sum语句产生的总和行的数据
  • GRANDTOTAL

在print中放置style=改变的是全表。比如header会改变全表的头部,如果只想改变某列的头部,需要再VAR语句中使用style:

VAR variable-list/STYLE(location-list)={style-attribute=value};

仅有variable-list中的变量会被改变风格。想要不同的变量有不同的风格,可以使用复合VAR语句。

例子 下面是关于女子5000米滑冰奥运会金牌获得者的数据,变量一次为:奥运年年份、国家、时间、比赛记录(有WR的表示是世界记录)。

下面的代码用proc print创建了HTML文件,使用的是默认风格模板。

结果如下:

下面的代码使用了style来改变所有数据单元的背景:

结果如下:

下面的代码增加VAR语句,将record列的字体改为斜体和粗体:

结果为

4.9 用style=option定制proc report输出

与4.8类似,基本语句为:

PROC REPORT STYLE(location-list)={style-attribute=value};

比如,如果想创建一个名为MYSALES的报告,并将列标题设置为绿色:

PROC REPORT DATA=mysales STYLE(HEADER)={BACKGROUND=green};

如果只需要改变报告中的某一列属性,则需要define语句,下面的语句告诉SAS使用month作为组变量,将其数据和标题的背景改为蓝色:

DEFINE Month/GROUP STYLE(HEADER COLUMN)={BACKGROUND=blue};

还可以用break和rbreak语句为摘要(summary)指定一个风格。下面的语句告诉SAS,对于month的每一个值,为摘要使用红色背景,为总体报告摘要使用橙色背景:

例子 下面是不同的女子5000米滑冰奥运会金牌获得者的数据,变量依次为:姓名、国家、年份、金牌数。每一行包括了两条记录:

下面的代码使用proc report创建了一个HTML文件,使用默认模板:

结果为:

下面的代码使用default风格模板,但在procreport中增加style选项以改变所有数据的背景颜色,并居中:

结果为:

现在将style添加到define语句中,只改变name这一列:

结果为:

4.10 使用style=option定制proc tabulate输出

下面显示了proc tabulate语句中可以应用style的地方,并且影响的表区域:

Proc tabulate语句 如果想要来自数据集MYSALES的表的所有数据单元都变成黄色背景:

PROC TABULATE DATA=mysales STYLE={BACKGROUND=yellow};

Table语句 下面的代码使得all列都有红色背景:

TABLE City,Month ALL*{STYLE={BACKGROUND=red}};

CLASSLEV,VAR,和CLASSstatements CLASSLEV,VAR,和CLASS语句都是在斜杠/后面应用style语句。注意的是,classlev语句中的变量必须出现在class语句中,下面的代码是将月份month变量的每个值(Jan,Feb,Mar…)的前背景应用为绿色,使用classlev语句如下:

CLASSLEV Month/STYLE={FOREGROUND=green};

例子 下面是一份关于奥运会男子滑冰的数据,OR是奥运会纪录,WR是世界记录,NONE既不是奥运会记录,也不是世界记录。注意一行有四个观测值:

Tabulate过程建立了一个表,以年份作为行,记录作为列。年份和N的顶部都通过设置为null将其消除。ODS语句创建了HTML文件,使用默认模板:

结果如下:

现在将数据单元的数据居中,并将背景设置为白色:

显示结果为:

4.11 为你的输出增加交通信号灯

交通信号灯是基于单元格的值,来控制格的风格。它可以使得重要值变得醒目,它可以在print、report、tabulate中被使用。

使用之前需要做两件事:首先创建用户定义的格式。其次,在style=中将风格属性等于你定义的格式,比如,你创建了一个格式:

在print的VAR语句中,将属性值等于这个格式:

VAR Balance/STYLE={FOREGROUND=posneg.};

现在所有balance变量风格都发生变化。

例子 下面的数据是2002年冬奥会中,男子5000米滑冰前五名的数据,包括姓名、国家、成绩(用时)

下面代码读取打印数据,生成HTML文件,使用default模板:

结果为:

想要用信号灯显示每个成绩与世界记录的378.72、奥运记录382.20比较的结果,先创建用户自定义的格式REC,快于世界记录的用红色显示,橙色显示快于奥运记录的,其他颜色设置白色。接着在print语句中增加var语句,使用style=option为时间变量分配风格。最后,将定义的格式REC赋给background。

结果如下:

4.12 选择风格属性

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数说工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.1 ODC的概念
  • 4.2 追踪选择过程的输出
  • 4.3 从过程输出中创建SAS数据集
  • 4.4 使用ODS语句创建HTML输出
  • 4.5 使用ODS语句创建RTF输出
  • 4.6 使用ODS创建printer输出
  • 4.7 定制标题和注脚
  • 4.8 用style=option定制proc print输出
  • 4.9 用style=option定制proc report输出
  • 4.10 使用style=option定制proc tabulate输出
  • 4.11 为你的输出增加交通信号灯
  • 4.12 选择风格属性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档