我创建了一个存储过程,但我想将输出导出到Excel。我通常的导出语句在存储过程中不起作用。
%let _ODSDEST=none;
%STPBEGIN();
data x;
set sashelp.class;
run;
proc export data=x outfile = "//my documents/sp_test.xlsx" dbms=xlsx replace;
sheet="table1";
run;
* Begin EG generated code (do not edit this line);
;*';*";*/;quit;
%STPEND;
有没有办法让它在存储过程中起作用?
答案 0 :(得分:1)
使存储过程返回excel文件的一种方法(实际上在这种情况下,它是一个excel将会愉快地打开的xml文件)是使用ODS输出tagsets.excelxp(xml)。
执行此操作时,可以使用stpsrv_header修改HTML标头。第一个语句告诉浏览器用excel打开文件,第二个语句告诉它文件名。我相信这个头部修改工作,存储过程需要提供流式结果,而不是包结果。但我可能是错的。
当我在下面运行时,我从浏览器中获取文件下载对话框,允许我打开或保存文件。我是从Stored Process Web App运行的,但在从Information Delivery Portal调用时应该可以正常工作。
%let _odsdest=tagsets.excelxp;
%let rc=%sysfunc(stpsrv_header(Content-type,application/vnd.ms-excel));
%let rc=%sysfunc(stpsrv_header(Content-disposition,attachment%str(;) filename=MyExcelFile.xls));
%stpbegin()
proc print data=sashelp.shoes (obs=&obs);
run;
%stpend()
答案 1 :(得分:0)
你检查了你的拼写proc exportd和outfile ='mypath / my documents / myoutpt.xlsx'dbms = xlsx或outfile ='mypath / my documents / myoutpt.xls'dbms = xls ??你也可以尝试使用ODS。