在项目研究过程中,为了便于进行数据清理,加快数据审核进度,SAS程序员通常会根据DM或申办方订制的数据清单进行data listing的编程,定期运行。为了方便DM或申办方查看结果,我们通常会将运行得到的data listing以excel的格式呈现。
将SAS数据导出到excel的方法有很多种,常用的包括SAS DDE(Dynamic Data Exchange),ODS(Output Delivery System),proc export等等。通常情况下,DM或申办方会对输出的data listing有一些详细要求,比如字体字号颜色的设置,首行固定加筛选等。鉴于此,本文详细介绍了运用ODS导出数据集到excel的方法。
一般用ODS导出数据集到excel可以使用以下几种方式:
然后使用ods excel和ods excel close代码将上述语句包含在其中,具体实现方法主要包括以下几个方面:
首先我们应该设置好excel的输出路径以及整个excel表格的格式,我们借助options选项来进行实现:
常用的options选项包括:
1、sheet_name="sheet名称"
根据DM或者申办方提供的spec自定义输出excel的sheet的名字。
2、sheet_interval="BYGROUP/PAGE/PROC/NONE/NOW/TABLE"
当不希望输出的表都写在一个sheet里时,这个选项就决定了什么时候更换excel的sheet。
BYGROUP:过程步中一般可以用by选项进行分组,这个选项可以让每个by选项的分组,作为一个独立的sheet,sheet的名字就是by变量的值。
PAGE:每一页作为一个独立sheet。
PROC:每个过程步的结果作为一个sheet。
NONE:将所有的数据都放在一个sheet里。
NOW:立刻生成一个新的sheet。
TABLE:每个表格一个sheet。
实际上,我们借助NONE和BYGROUP再加sheet名字重定义就可以基本实现可以随意增加新的sheet。
3、embedded_footnotes="yes/no"
指定脚注是否进行输出。
4、embedded_titles="yes/no"
指定标题是否进行输出。
5、absolute_column_width=''''
设置绝对列宽,单位可选(in cm em mm ex pt px)。
6、absolute_row_height=''''
设置绝对列高,单位可选(in cm em mm ex pt px)。
7、autofilter=''ALL/NONE/range/column''
设置筛选下拉菜单,一般用来筛选排序用的。
ALL:全都加筛选,它只有表格从A1单元格开始的时候才有效。
NONE:全都不加筛选(默认值)。
range:设置输入范围,例如‘3-5’,或者‘A:D’这样。值得注意的是这里的范围是相对范围,而不是绝对范围。它不是参照整个excel表来定的位置,而是参照具体表格的位置。
column:设置输入具体变量的位置,但只能输入一个,例如:'2'或者‘C’。与range里的情形类似,该数字是相对表格的位置,不是excel里sheet的位置。
8、start_at=" "
设置表格的起始位置,例如‘B2’,‘2,2’等,默认是第一行的第一个
单元格。这个选项能决定表格在sheet中的位置。
9、contents="on/off"
是否创建目录,一般默认设置为‘off’。
10、frozen_headers="on/off/number"
冻结首行,默认为列标题所在行。如果输入数字则冻结对应行以上的部分,注意这个数字是绝对位置,不论表格位置在哪里,都会冻结设定的位置。
11、frozen_rowheaders="on/off/number"
冻结列,默认冻结表格最后一列的左边所有列。也可以输入数字,该数字也是绝对位置。
12、hidden_columns=" "
隐藏列,可以用数字或字母表示列,但是要注意数字和字母不能混用。例如'1,2,5,6,8-10','1-10','A:C'等。这里列位置的引用是绝对的,是按excel的sheet的位置,而不是按表位置为参照的。
13、hidden_rows=" "
隐藏行,使用方法同hidden_columns。
14、orientation="portrait/landscape"
确定sheet输出为横向或纵向。
确定好输出的excel格式后,我们一般会借助proc report进行详细输出,因为proc report可以针对每一个变量以想要的形式输出。
简单代码如下:
其中,columns命令告诉SAS哪些变量以什么顺序被包含。如果不写这个命令,SAS就会默认把数据集中的所有变量纳入。define命令为每一个变量指定特定的输出样式。
最后,可能会有需求定义多个特殊定性变量或者定量变量的背景色,也就要求我们要控制好输出的excel的外观。我们可以借助ODS语句中的style=选项指定一个新的style template,从而控制输出格式。
例如,对变量的背景颜色进行设置时:
我们便可以将年龄大于15岁的背景颜色输出为红色,小于等于15岁的背景颜色设置为绿色:
其它常用的style选项还有:
BACKGROUND——指定表或格的背景颜色
BACKGROUNDIMAGE——指定表或格的背景图片
FONT_FACE——指定格中文字的字体(Times, ourier, Arial, 和Helvetica)
FONT_SIZE——指定格中文字的相对大小(1-7)
FONT_STYLE——指定格中文字的样式(ITALIC,ROMAN,或SLANT)
FONT_WEIGHT——指定格中文字的相对大小(Bold,Medium和Light)
FOREGROUND——指定表或格的前景颜色或文字的颜色
根据上文的方法和程序框架为主,我们就可以轻松得到一个想要的漂亮的报表。当然,以上只是简单展示了一些借助ODS(Output Delivery System)输出excel的简单功能,在data listing的实际工作中,有时会有对标题和脚注进行自定义设置等要求,这些都可以通过ODS实现。
更多具体设置,欢迎大家登录https://support.sas.com/进行查阅。
参考文献:
Paper 120-2007 Creating Multi-Sheet Excel Workbooks the Easy Way with SAS。