【问题标题】:Importing an excel file into SAS: named ranges longer than 32 characters将 excel 文件导入 SAS:命名范围超过 32 个字符
【发布时间】:2014-12-15 12:24:12
【问题描述】:

我有一个 (2010) excel 文件,其中包含我要导入 SAS 的工作表的长名称。作为一个虚拟示例,假设此工作表名为 somesheetnamethatislongenough(这是 30 个字符长 - 因此在 2010 excel 中允许作为工作表名称)。现在假设我只想在这张表中导入 C6:G200 范围。现在我应该可以通过使用 proc import 中的 range= 选项来做到这一点,如下所示

proc import
    out=chk_xl_import
    datafile="somefilename.xlsx"
    replace
;
    range="somesheetnamethatislongenough$C6:G200";
    getnames=no;
run;

但是,我收到一条错误消息:

ERROR 65-58: Name 'somesheetnamethatislongenough$C6:G200' is too long for a SAS name in this context.

(使用 sheet=; 选项结合 range=; 选项会产生相同的错误)。我想我可以通过在 libname 语句中使用 excel 引擎来解决这个问题,但我遇到了同样的问题。所以这段代码也不起作用:

libname
    myxl_lib
    excel
    "somefilename.xlsx"
    header=NO
;

data chk_xl_lib;
    set myxl_lib."somesheetnamethatislongenough$C6:G200"n;
run;

libname myxl_lib clear;

我基本上得到了同样的错误:

ERROR 307-185: The data set name cannot have more than 32 characters.

除了导入整个工作表(即从范围中删除“C6:G200”使其少于 32 个字符)然后在 SAS 中对结果数据集进行子设置之外,还有什么可以做的吗?

【问题讨论】:

  • 顺便说一句,PROC IMPORT 只是在后端使用 LIBNAME 引擎,因此它本身对您没有帮助。

标签: excel import sas proc


【解决方案1】:

最简单的方法是在 Excel 中设置一个命名范围,然后在 SAS 中的导入语句中引用它。如果您使用数据步骤方法,那么您不需要将范围名称作为名称文字,例如

data chk_xl_lib;
set myxl_lib.named_range;
run;

【讨论】:

    【解决方案2】:

    如果您不想修改 excel 文件以使其正常工作,可以使用SQL Pass-Through Facility

    proc sql;
      connect to excel (path="somefilename.xlsx");
      create table chk_xl_import as
      select * from connection to excel
        (
          select * from `somesheetnamethatislongenough$C6:G200`
        );
      disconnect from excel;
    quit;
    

    这可能需要安装SAS/Access Interface to PC Files 才能工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 2022-08-12
      • 1970-01-01
      相关资源
      最近更新 更多