导出sas存储过程输出



我创建了一个存储过程,但我想将输出导出到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;

是否有一种方法可以让它在存储过程中工作?

让存储进程返回excel文件的一种方法是使用ODS输出标记集(实际上,在本例中它是excel将愉快打开的xml文件)。excelxp (xml) .

当你这样做的时候,你可以使用stpsrv_header来修改HTML头。第一个语句告诉浏览器用excel打开文件,第二个语句告诉浏览器文件名。我认为,为了使这个头修改工作,存储过程需要交付流结果,而不是包结果。但我可能错了。

当我在下面运行时,我从浏览器中得到一个文件下载对话框,允许我打开或保存文件。我从存储过程Web应用程序运行,但应该工作正常时,从信息传递门户调用。

%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()

您是否检查了您的拼写过程export和outfile='mypath/my documents/myoutpt.xlsx' dbms=xlsx或outfile='mypath/my documents/myoutpt.xls' dbms=xls??你也可以试试ODS

您也可以尝试将STP设置为流媒体web服务,删除%STPBEGIN%STPEND宏,并使用此宏发送到_webout: https://core.sasjs.io/mp__streamfile_8sas.html

这样做的好处是,您的代码随后也将在Viya上工作。

最新更新