这是写给 写DVP的临床SP的,其他SP可以不用看。
最近有一位读者咨询:如何将SAS数据集里面变量的label作为输出EXCEL的列名,并同时把几十个数据集都这样处理,输出到一个EXCEL里面。
当时把方法告诉了她,可能她不是SP,并且对这方面了解比较少,具体怎么操作不清楚。我也很久没辅助过DM进行DVP或者SDV的编写了,她这一问,立马让我回想起了以前写SDV,输出进展报告的那段日子。
那时候数据量大,还要输出几十张sheet,跑完全部的报告至少需要半小时左右,然后SAS还总是报内存不足或者其他各种各样的问题。SAS报内存不足的问题,可以通过下面这种方式输出,但是输出的是XLS文件,而且长得也丑。
ods tagsets.excelxp file="XXXXX路径.xls";
ods tagsets.excelxp close;
如果想输出XLSX后缀的EXCEL,可以通过ODS EXCEL file="XXXX.xlsx",这个方法适合数据量相对少一点的项目。然后再通过循环,就可以将SAS数据集输出到几十张sheet了。然后写proc report的时候,什么都不用加,SAS就会自动将SAS数据集变量的标签作为列名了。
proc report data=raw.&dataset;
column all;
run;
同时她们还要求要将sheet名也变成数据集的名称,而不是直接用数据集的简称,比如说AE sheet要变成不良事件,其实这也可以通过循环实现。但是我看了DM发过来的RAW数据集,查看数据集的属性的时候,发现数据集并没有对应的表单名称,都是空的,所以如果你们也是这样的话,要么输出EXCEL后自己手动改,要么导入你们的那个als,获取所有的表单名称,然后像程序里面一样转换成宏变量。
![](https://img.haomeiwen.com/i1998906/8e0fd9122754d18c.png)
我用SDTM数据集测试了一下,程序可以实现将表单的label作为sheet名,同时需要注意的是,很多raw数据集表单名称里有"/",""这种符号,EXCEL好像是不允许这种作为sheet名的,我在程序里也处理了。
![](https://img.haomeiwen.com/i1998906/eff6cace9fa997b9.png)
更多的东西其实可以去SAS官网查找,我当初也是花了很多时间去研究ODS导出EXCEL,但是现在都不碰了,都是查找以前的笔记,然后重新加工程序,写出了下面的代码,所以决定付费,需要的话自取。
同时也上传了利用ods tagsets.excelxp file输出EXCEL的程序,这个看下你们用不用的到。程序拿来就是可以直接用的,我已经测试过了,你们只要改一下你们的路径和逻辑库就好了。
简书的读者去另一个地方获取代码
网友评论