Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS:ODS Excel在没有数据时锁定文件_Sas - Fatal编程技术网

SAS:ODS Excel在没有数据时锁定文件

SAS:ODS Excel在没有数据时锁定文件,sas,Sas,我注意到,每当我试图在ODS Excel中运行PROC REPORT时,如果没有数据,它就永远不会完成对文件的写入,而且会卡住。该文件保持锁定状态 这是为什么?如何解决?我事先不知道我的报告是否有任何数据 下面是示例代码: data person; input name $ dept $; datalines; ; GOPTIONS RESET=ALL; ODS Excel FILE = "C:\Users\jloktie\Desktop\test1.xls

我注意到,每当我试图在ODS Excel中运行PROC REPORT时,如果没有数据,它就永远不会完成对文件的写入,而且会卡住。该文件保持锁定状态

这是为什么?如何解决?我事先不知道我的报告是否有任何数据

下面是示例代码:

    data person;
   input name $ dept $;
   datalines;

;


GOPTIONS RESET=ALL;
 ODS Excel FILE = "C:\Users\jloktie\Desktop\test1.xlsx" STYLE = CSROD

options(embedded_titles='yes' sheet_interval='none' autofilter= 'all' 
Absolute_Column_Width = '10') ;

proc report data = person nowd  HEADLINE HEADSKIP

style (report) = {background = white font_face = "Verdana" font_size = 8pt  just=LEFT }
style (column) = {background = white font_face = "Verdana" font_size = 8pt  just=LEFT}
style (header) = {foreground = white font_face="Verdana" font_size = 10pt just=LEFT background = cx4d4d4d}  ;


columns name;

define name / "Name";

run;

ODS _ALL_ CLOSE;
下面是日志上的内容:

29349  data person;
29350     input name $ dept $;
29351     datalines;

NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set WORK.PERSON has 0 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           0.03 seconds
      cpu time            0.01 seconds


29353  ;
29354
29355
29356  GOPTIONS RESET=ALL;
29357   ODS Excel FILE = "C:\Users\jloktie\Desktop\test1.xlsx" STYLE = CSROD
29358
29359  options(embedded_titles='yes' sheet_interval='none' autofilter= 'all'
29360  Absolute_Column_Width = '10') ;
29361
29362  proc report data = person nowd  HEADLINE HEADSKIP
29363
29364  style (report) = {background = white font_face = "Verdana" font_size = 8pt  just=LEFT }
29365  style (column) = {background = white font_face = "Verdana" font_size = 8pt  just=LEFT}
29366  style (header) = {foreground = white font_face="Verdana" font_size = 10pt just=LEFT background
29366! = cx4d4d4d}  ;
29367
29368
29369  columns name;
29370
29371  define name / "Name";
29372
29373  run;

NOTE: No observations in data set WORK.PERSON.
NOTE: No observations in input data set.
NOTE: PROCEDURE REPORT used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds


29374
29375  ODS _ALL_ CLOSE;
NOTE: Writing EXCEL file: C:\Users\jloktie\Desktop\test1.xlsx

我使用的是SAS 9.4 TS Level 1M4。

如果您不提供任何输出,ODS EXCEL将不会生成有效的XLSX文件。因此,要么添加其他输出,要么在没有输出时跳过运行ODS语句

始终具有输出的一种方法是确保数据集始终具有至少一个观察值

data for_report ;
  if _n_=1 and eof then output;
  set person end=eof;
  output;
end;
proc report data=for_report ....

在M6中,ODS EXCEL将创建一个空工作簿并打开它

如果不关闭空工作簿,则随后提交相同代码或任何试图重新创建工作簿的代码时,目标将被锁定 首先


非常感谢。我想只有在基础表中有观察结果的情况下,我才需要弄清楚如何使用ODS Excel。我很惊讶SAS没有覆盖它。
ODS Excel 
    FILE = "test1.xlsx" 
    options ( 
        embedded_titles='yes' 
        sheet_interval='none' 
        autofilter= 'all'
        Absolute_Column_Width = '10'
    ) 
;

* no output;
proc report data=sashelp.class;
where name=:'z';
run;

* closing the destination creates an empty workbook;
ods excel close;