将excel文件导入SAS:命名范围超过32个字符

时间:2014-12-15 12:24:12

标签: excel import sas proc

我有一个(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中对结果数据集进行子设置,可以做任何事情吗?

2 个答案:

答案 0 :(得分:1)

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

data chk_xl_lib;
set myxl_lib.named_range;
run;

答案 1 :(得分:1)

如果您不想修改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才能实现此目的。