将一个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
才能正常工作。