【问题标题】:output data to excel with sheet name contains space使用工作表名称将数据输出到 Excel 包含空格
【发布时间】:2015-07-17 09:22:14
【问题描述】:
data _null_;
    call symputx('ts','a b');
run;

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

但这会创建一个名为a_b的工作表(原来的空格被_替换。

怎么会这样?

【问题讨论】:

  • 这是为@W_ee 发明下划线的地方,以减少将空格放入文件名、变量名等的诱惑。每个人都同意这一点,直到微软在不应该出现的地方允许空白、破折号等破坏了我们。
  • 顺便说一下data _null_; call symputx('ts','a b'); run;相当于let ts = a b;
  • @DirkHorsten 但是在 excel 中可以使用带空格的工作表名称。
  • 是的,它是,而且用户喜欢它,:(

标签: sas


【解决方案1】:

这与 SAS 的 proc export 中的工作方式有关。它在幕后所做的是创建一个libname,然后创建一个数据集。在正常 (validmemname=compat) 规则下,数据集名称中可能没有空格。有一个选项 (validmemname=extend) 告诉 SAS 允许空格(然后您使用named literal 访问,即"a b"n(n 告诉 SAS 它是一个名称),但它似乎是 proc export(和 libname本身)不听那个。

但是,目前有一种解决方法:如果您使用的是 SAS 9.4 TS1M1 或更高版本,则可以在导出中使用 dbms=xlsx。这使用了与默认 excel(使用 Microsoft 的 JET 引擎)不同的引擎,并且很容易允许空格。

【讨论】:

    【解决方案2】:

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

    proc export data=sashelp.class 
        outfile='class.xlsx'
        dbms=xlsx 
    ;
        sheet="A B";
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多