1. 首页
  2. R语言

【学习】七天搞定SAS(四):数据输出

【学习】七天搞定SAS(四):数据输出

弄清楚了基本的PROC之后,开始研究SAS的输出…毕竟有了数据处理的结果之后,还要有一个比较舒服的输出格式才可以嘛。

SAS的结果发送系统:ODS

SAS里面的输出叫的比较好听: Output Delivery System (ODS),结果发送系统。也就是说,要不停的开始研究ODS这个东西了。输出的方向包括:

  • LISTING:标准SAS输出

  • HTML: HTML网页输出

  • RTF: 富文本格式

  • PRINTER:高分辨率打印

  • PS: ps矢量格式

  • PCL: 打印机操纵语言

  • PDF:PDF格式

  • OUTPUT: SAS数据表格

  • MARKUP:XML、excel、csv、latex等格式

  • DOCUMENT:输出文档

基本满足要求了?当然,SAS还有模板可以选,还有追踪和选择…不着急,我们一个个来研究。

模板的话,需要调用PROC TEMPLATE:

1

2

3

PROC TEMPLATE;

LIST STYLES;

RUN;

自带了若干模板:

1

2

3

ANALYSIS D3D MINIMAL SASWEB

BARETTSBLUE DEFAULT PRINTER SANSPRINTER

BRICK JOURNAL RTF STATISTICAL

然后TRACE会在日志文件里面跟踪输出的对象:

1

2

3

4

5

6

7

8

9

DATA giant;

INFILE ‘c:MyRawDataTomatoes.dat’ DSD;

INPUT Name :$15. Color $ Days Weight;

* Trace PROC MEANS;

ODS TRACE ON;

PROC MEANS DATA = giant;

BY Color;

RUN;

ODS TRACE OFF;

这样就有日志中的记录:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Output Added:

Name: Summary

Label: Summary statistics

Template: base.summary

Path: Means.ByGroup1.Summary

NOTE: The above message was for the following bygroup: Color=red

Output Added:

Name: Summary

Label: Summary statistics

Template: base.summary

Path: Means.ByGroup2.Summary

NOTE: The above message was for the following bygroup: Color=yellow

最后,还可以选择ODS输出的对象:

1

2

3

4

5

PROC MEANS DATA = giant;

BY Color;

TITLE ‘Red Tomatoes’;

ODS SELECT Means.ByGroup1.Summary;

RUN;

这样就只有第一组的统计数据了。

【学习】七天搞定SAS(四):数据输出

SAS中建立输出数据表:OUTPUT

很多时候我们希望直接把结果放在另外一个SAS的数据表中,这样就需要OUTPUT声明了。

1

2

3

4

5

6

7

8

9

10

11

12

13

DATA giant;

INFILE ‘c:MyRawDataTomatoes.dat’ DSD;

INPUT Name :$15. Color $ Days Weight;

PROC TABULATE DATA = giant;

CLASS Color;

VAR Days Weight;

TABLE Color ALL, (Days Weight) * MEAN;

TITLE ‘Standard TABULATE Output’;

ODS OUTPUT Table = tabout;

RUN;

PROC PRINT DATA = tabout;

TITLE ‘OUTPUT SAS Data Set from TABULATE’;

RUN;

最终可以得到:【学习】七天搞定SAS(四):数据输出

很显然,对于下面那个SAS表格的输出,我们可以像操纵普通表格一样来操纵它,各种方便省事对吧?毕竟有的时候SAS给我们的并不是我们想要的最终结果,还要各种小小加工一番才好。

SAS的输出:HTML

有的时候HTML格式的报告会更加方便传播,或者放在服务器上、自动定期更新什么的,便于大家远程直接查看。代码其实也不麻烦:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

* Create the HTML files and remove procedure name;

ODS HTML FILE = ‘c:MyHTMLFilesMarine.html’;

ODS NOPROCTITLE;

DATA marine;

INFILE ‘c:MyRawDataSealife.dat’;

INPUT Name $ Family $ Length @@;

RUN;

PROC MEANS DATA = marine MEAN MIN MAX;

CLASS Family;

TITLE ‘Whales and Sharks’;

RUN;

PROC PRINT DATA = marine;

RUN;

* Close the HTML files;

ODS HTML CLOSE;

最终可以得到HTML网页截屏如下:【学习】七天搞定SAS(四):数据输出

SAS输出富文本:RTF

RTF是一种可以直接被WORD等office软件读取的格式,支持图文表格混排什么的。有的时候直接输出出来也会各种方便(吐槽:相比于R的knitr直接各种文件格式混搭、数据随处可以插入,SAS还是有很长的一段路要走哇)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

* Create an RTF file;

ODS RTF FILE = ‘c:MyRTFFilesMarine.rtf’ BODYTITLE COLUMNS=2;

ODS NOPROCTITLE;

DATA marine;

INFILE ‘c:MyRawDataSealife.dat’;

INPUT Name $ Family $ Length @@;

RUN;

PROC MEANS DATA = marine MEAN MIN MAX;

CLASS Family;

TITLE ‘Whales and Sharks’;

RUN;

PROC PRINT DATA = marine;

RUN;

* Close the RTF file;

ODS RTF CLOSE;

输出的文档大概长成这样:

【学习】七天搞定SAS(四):数据输出

勉强可以看看吧。SAS的默认配色真心丑陋,像上世纪win 98时代的…

SAS的输出样式自定义

对于PRINTER输出和REPORT、TABULATE加STYLE选项,就不赘述了,目测不会有用到的需求——一般SAS都不会给我最终拿去给 partner或者boss汇报的格式,再者就算SAS里面能做,也实在是太麻烦了,成本太高。我的观点就是,做统计的软件还是做统计吧,那些花里胡哨的 修饰还是交给excel这种所见即所得的软件来搞定吧。各有所长才是~

不过SAS有个高亮单元格的功能,可以简单说一。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

ODS HTML FILE=‘c:MyHTMLmens2.html’;

PROC FORMAT;

VALUE rec 0 < 378.72 =‘red’

378.72 < 382.20 = ‘orange’

382.20 HIGH = ‘white’;

RUN;

PROC PRINT DATA=results;

ID Place;

VAR Name Country;

VAR Time/STYLE={BACKGROUND=rec.};

TITLE ‘Men’‘s 5000m Speed Skating’;

TITLE2 ‘2002 Olympic Results’;

RUN;

ODS HTML CLOSE;

这样最终的结果就会有单元格高亮效果了:

【学习】七天搞定SAS(四):数据输出

【学习】七天搞定SAS(四):数据输出

勉强可以一看吧。EXCEL的条件格式(conditional formatting)更顺手强大。

SAS的导出模块:EXPORT

如果说ODS是结果的发送,那么export则是更加原始的数据输出(数据而不一定是分析结果)、供其他软件读取。

SAS图形界面下有一步步向导式的export,但是可惜我悲催的一开始就要接触命令行下面的SAS…跳过。

EXPORT可以输出文本格式,最常用的就是逗号或者tab分割的。

1

2

3

4

LIBNAME travel c:MySASLib;

* Create Tabdelimited file;

PROC EXPORT DATA = travel.golf OUTFILE = ‘c:MyRawDataGolf.txt’ REPLACE;

RUN;

这里就输出了一个tab分割的文本文件。

当然也可以输出excel文件:

1

2

3

4

LIBNAME travel ‘c:MySASLib’;

* Create Microsoft Excel file‘;

PROC EXPORT DATA=travel.golf OUTFILE = ‘c:MyExcelGolf.xls REPLACE;

RUN;

这个和ODS有点重复了呢。不过R也是啊,有各种各样输出的方式,任君选取。

原文始发于微信公众号(PPV课数据科学社区):【学习】七天搞定SAS(四):数据输出

原创文章,作者:ppvke,如若转载,请注明出处:http://www.ppvke.com/archives/30969

联系我们

4000-51-9191

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息