本来十点多还在处理工作上的问题,拿起手机,看到有几个读者加我,然后一个读者问我sas导出excel提示内存不足怎么办,哈哈,立马回到当初协助DM进行数据核查,写DVP,SDV的时光。
那段时间真是被这两个折磨,尤其是SDV,逻辑多,需要注意的地方多,很像现在我写的ADTTE,需要考虑到多种情况。然后写完程序,导出数据集的时候也是另一个痛苦源泉,因为DM那边的数据集非常大,用ODS EXCEL+PROC REPORT导出到EXCEL的时候总是报错,导出不了excel。
那段时间真是被这两个折磨,尤其是SDV,逻辑多,需要注意的地方多,很像现在我写的ADTTE,需要考虑到多种情况。然后写完程序,导出数据集的时候也是另一个痛苦源泉,因为DM那边的数据集非常大,用ODS EXCEL+PROC REPORT导出到EXCEL的时候总是报错,导出不了excel。
对于要导出数据集到excel的临床SAS程序员,这些错是不是很眼熟?哈哈哈。然后网上说用什么compress压缩内存什么的,我只能说都试过了,不管用!!!
其实有一种方式解决的,就是用ODS TAGSETS.EXCELXP
我找了一下我的云笔记,把代码分享给你们,以后应该都用不到了。用这种方法可以较快导出EXCEL,相比ods excel快很多,也不会报内存不足。
至于不足,导出的是XML格式的EXCEL文件,而且导出的EXCEL文件内存很大,而且每个SHEET的列宽和行高占据空间很不合理,不像ODS EXCEL那样美观,所以你最后得手动调格式(发善心),发给DM前。而且不能在ods tagsets.excelxp调整这些格式,放心,我已经搜过了。即使可以调格式,也是好了这个坏了那个。
ods tagsets.excelxp file="XXXXXXXXXXXXXXXXX" style=htmlblue;
ods tagsets.excelxp options(sheet_name="数据管理进程报告数据" sheet_interval='none' ) ;
proc report data=sdvout.dataprog split='#';
columns _name_ avalc ;
define _name_/"指标" ;
define avalc /"数据" ;
run;
ods tagsets.excelxp options(sheet_name="入组进度报告" sheet_interval='none' ) ;
proc report data=sdvout.enroll split='#';
columns 中心名称 DSQUE 筛选中 筛选失败 治疗中 治疗结束 入组总数 受试者总人数;
define 中心名称/"中心名称" ;
define DSQUE/"入组队列" ;
define 筛选中 /"筛选中" ;
define 筛选失败 /"筛选失败" ;
define 治疗中 /"治疗中" ;
define 治疗结束/"治疗结束" ;
define 入组总数 /"入组总数" ;
define 受试者总人数/"受试者总人数" ;
run;
ods tagsets.excelxp close;