我有一个(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中对结果数据集进行子设置,可以做任何事情吗?
答案 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
才能实现此目的。