我想将表从Excel传输到SAS(版本为9.2,Excel文件格式为.XLSM,宏)。列名称将从单元格B3中读取,数据将从单元格B4开始,如下所示:
A B C D E F G ...
1
2
3 Col1 Col2
4 15 20
5 16 21
6 ... ...
问题是最后一行的编号是未知的,因为表长度今天可以是200行,明天可以是350行。
那么如何从Excel(.XLSM)将此表导入SAS表?
我在某处读到DATAROW
Proc Import
DBMS=EXCEL
时我们可以使用proc import datafile = "!datafile" out=Table1 DBMS = EXCEL REPLACE;
SHEET = "Sheet1"; GETNAMES=YES; MIXED=YES; USEDATE=YES; SCANTIME=YES; NAMEROW=3; DATAROW=4;
run;
:
DATAROW
但是,SAS无法识别PROC SQL;
CONNECT TO EXCEL (PATH='C:\\thepath\excelfile.xlsm');
Create Table Table1 as SELECT * FROM CONNECTION TO EXCEL
(SELECT * FROM [Sheet1$]);
DISCONNECT FROM EXCEL;
QUIT;
选项,并提供错误:
错误180-322:声明无效或使用不正确。
还有另一种从Excel导入表的方法,如:
{{1}}
有谁知道如何将.XLSM中包含未知行数的表导出到SAS?
答案 0 :(得分:0)
我发现"无效"替代解决方案,它读取Excel中的所有可能行(读取50.000行),同时检查列Col1
下的每一行(如果这些行具有值)。
它需要7-8秒,它的工作原理。但正如我所写,读取整行50.000行感觉效果不佳。有没有人有更好的主意?
PROC SQL;
CONNECT TO EXCEL (PATH='C:\\thepath\excelfile.xlsm');
Create Table Table1 as SELECT * FROM CONNECTION TO EXCEL
(SELECT * FROM [Sheet1$B3:C50000] WHERE Col1 IS NOT NULL);
DISCONNECT FROM EXCEL;
QUIT;
答案 1 :(得分:0)
您可以使用libname
语句直接连接到Excel:
libname xlsFile Excel 'C:\\thepath\excelfile.xlsm';
data want;
set xlsFile.'Sheet1$'n(firstobs=3);
where NOT missing(Col1);
run;
这假设您已在SAS服务器上安装了Excel,并购买了SAS / ACCESS到PC文件。