如果只是做我们SAS程序员的工作,很少用到导出数据集到excel的功能(主程序员不一定),但是如果帮DM导出报告的话,就经常用,而且还会遇到很多问题,以后慢慢讲,这就是我为什么用(第一章)这个标题。
你们说帮DM跑报告,可能比较疑惑,我找到一则SAS程序员招聘要求,红框里面要求的就是我们要做的。看到这则招聘启示,吸引我的还有2年经验,上海才1-2万,一般来说贴出1-2万,给出的都是最低的,也就是1万,嗯~~不予置评。
今天用标准版的SAS,也就是下图中的样子,不太好用,写程序没有提示,输出不了数据集,只能通过proc print查看数据集的样子。废话不多说,下面就来根据不同需求输出excel。
原数据:我直接在excel输入数据,然后proc import导入。
1:根据同一变量的不同值输出多张sheet.如:根据gender输出男的一个sheet,女的一个sheet。
以前的话我可能会输出两个数据集,然后再导出到excel,有点麻烦,但是直接用by选项就ok了。而且我还犯了一个错误,就是在用by选项前没有排序!导致只输出一条,我还在那怀疑为什么?
排序后输出
可以看到数据根据性别分成两个sheet输出。
但是我们发现sheetname好像并不是我们想要的样子,比如说我们想以F,M分别作为sheetname,这怎么弄呢?我们可以在proc report前面用上options选项
注意options(sheet_name="#byval1") ;
"#byval1" 这个鬼东西代表你用by后面的第一个排序变量作为sheetname,而且输出文件路径后面没有分号(;),要不然options不起作用。
那我们来试试多加一个排序变量是什么样。
我在原文件中添加一个rich变量:
在程序中添加排序变量rich,输出如下:
发现数据集根据性别,根据rich分成四个sheet了,有意思。F2 sheet是性别为F并且rich为Y的集合。同理M,M2........
这些方法给我了一个思路,下图是我经手的SDV,目前的做法是分别输出多个数据集到库中,最后再用ODS选项输出报表,但是现在我在输出报告的时候,我可以把所有需要的数据集set到一起,然后添加一个标识符变量.
也就是我可以根据这个变量,用上面的方法输出报表。比如"sdv列表 标识符变量FLAG=1";"缺失页 标识符变量FLAG=2".....只要最后在proc report的时候 by flag就好了。有空去试试。
proc report还有很多功能,再加上ods,能够实现各种花里胡哨的要求,我十篇文章都不一定写完,只讲我遇到的吧。其实在帮DM导出报告的时候,会遇到很多问题。
其中的一个问题就是SAS总是报内存不足的错误,因为有时候DM那边会发过来100多万条数据,这时候往往SAS卡死,报告还输出不出来。但是我已经找到了解决方法,方便快捷。嘻嘻嘻。
---------------------------------------------------------------
在写文章的时候,我就在想现在的你在干嘛呢?我现在的关注只有30多个,但是我并不在意订阅数,因为我写文章的目的只是巩固自己的知识,而且关于SAS程序员的公众号关注一般都不多,可能从业人员少吧,但是DM和CRC的就比较多了。
现在的我一边听着薛之谦的《认真的雪》,只是今天突然发现薛之谦好像突然消失了,18年还是什么时候很火的,他有几首歌挺好听的。
很想给自己买一个1000多块的头戴耳机,到晚上的时候,听着音乐,慢慢地默默地享受孤独,但是舍不得。