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

我有一个(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中将结果数据集进行子设置?

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

 data chk_xl_lib; set myxl_lib.named_range; run; 

如果您不想修改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才能正常工作。