Sas 将数据输出到excel时,图纸名称包含空格

Sas 将数据输出到excel时,图纸名称包含空格,sas,Sas,但这将创建一个名为a_b的图纸。原始空间将替换为_ 这怎么会发生 这与SAS的proc导出中的工作方式有关。它在幕后做的是创建一个libname,然后创建一个数据集。在正常validmemname=compat规则下,数据集名称中可能没有空格。有一个选项validmemname=extend告诉SAS允许使用命名文字访问的空间,即bn n告诉SAS它是一个名称,但proc export和libname本身似乎不听这个 但是,在今天,有一种解决方法:如果您使用的是SAS 9.4 TS1M1或更高版

但这将创建一个名为a_b的图纸。原始空间将替换为_


这怎么会发生

这与SAS的proc导出中的工作方式有关。它在幕后做的是创建一个libname,然后创建一个数据集。在正常validmemname=compat规则下,数据集名称中可能没有空格。有一个选项validmemname=extend告诉SAS允许使用命名文字访问的空间,即bn n告诉SAS它是一个名称,但proc export和libname本身似乎不听这个


但是,在今天,有一种解决方法:如果您使用的是SAS 9.4 TS1M1或更高版本,则可以在导出中使用dbms=xlsx。它使用的引擎与默认excel不同,默认excel使用的是Microsoft的JET引擎,它允许轻松使用空格。

只需使用DBMS=XLSX选项,就可以在工作表名称中包含空格

data _null_;
    call symputx('ts','a b');
run;

proc export data=have
    outfile='path\file.xlsx';
    sheet="&ts.";
run;

这就是为@W_ee发明下划线的地方,以减少在文件名、变量名等中使用空格的诱惑。每个人都同意这一点,直到微软允许空白、破折号等出现在不应该出现的地方,把我们惯坏了;称为symputx'ts','ab';跑等于设ts=ab@DirkHorsten,但在excel中可以使用带空格的工作表名称。是的,它是,用户喜欢它:
proc export data=sashelp.class 
    outfile='class.xlsx'
    dbms=xlsx 
;
    sheet="A B";
run;