【SAS Says】基础篇:ODS的使用(下)

特别说明:本节【SAS Says】基础篇:SAS软件入门(下),用的是数说君学习《The little SAS book》时的中文笔记,我们认为这是打基础的最好选择。

转载请在文章开头注明微信号:shushuojun,谢谢!

在描述性分析中,介绍过proc report、proc tabulated这几个语句,如何定制输出的结果?字体、背景、颜色?

本节目录:

5.8 用style=option定制proc print输出

5.9 用style=option定制proc report输出

5.10 用style=option定制proc tabulate输出

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

5.12 选择风格属性


5.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列的字体改为斜体和粗体:

结果为

5.9 用style=option定制proc report输出

与5.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这一列:

结果为:

5.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文件,使用默认模板:

结果如下:

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

显示结果为:

5.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。

结果如下:

5.12 选择风格属性

原文发布于微信公众号 - 数说工作室(shushuojun)

原文发表时间:2015-08-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mathor

第六届蓝桥杯决赛B组C/C++——完美正方形

1635
来自专栏程序员的诗和远方

20180818_ARTS_week08

这道题是要把字符串中的数字变成 int,通常的做法是遍历字符串,然后判断是不是在 0~9 中,如果把 0~9 放数组里每次循环检查感觉不是太好,时间复杂度是个 ...

651
来自专栏前端说吧

JS-抽奖系统-实现原理

9304
来自专栏web编程技术分享

js常用方法和一些封装(2) -- 随机数生成

35510
来自专栏phodal

「微信小程序」剖析(四):原生的实时DOM转Virtual DOM

在之前的几篇文章里,我们讨论了MINA的一些原理。晚上在想着怎么结合Vux + Virtual Dom实现一个名为WINV框架的时候,在探索WCC功能才发现:自...

2206
来自专栏GreenLeaves

FactoryMethod工厂方法模式升级成AbstractFactory抽象工厂模式

具体参考抽象工厂(AbstractFactory)模式-创建型模式,本文在FactoryMethod工厂方法模式(创建型模式)的基础上进行业务进一步抽象,不做详...

943
来自专栏HTML5学堂

段落首字下沉

HTML5学堂:在项目中,时常能看到了一种文字展示的特殊效果——首字下沉(如图)。于是花了几分钟考虑了一下使用方法,脑测之后,又敲了敲代码实现了一下,写出来与大...

3975
来自专栏前端新视界

CSS 特殊属性介绍之 pointer-events

首先看一下 MDN 上关于 pointer-events 的介绍: CSS属性 pointer-events 允许作者控制特定的图形元素在何时成为鼠标事件的 t...

19310
来自专栏GopherCoder

『Go 内置库第一季:time』

时间的操作在项目中使用的非常频繁,比如说数据库中,经常有时间的操作,比如根据时间进行划分,统计之类的功能。

1183
来自专栏24K纯开源

QT中获取选中的radioButton的两种方法

QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButt...

2375

扫码关注云+社区

领取腾讯云代金券