从 Excel .xlsm 导入未知长度的 table
Importing table with unknown length from Excel .xlsm
我想将 table 从 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 ... ...
问题是最后的行号未知,因为table长度今天可能是200行,明天可能是350行。
那么如何将 table 从 Excel (.XLSM) 导入 SAS-table?
我在某处读到我们可以在 Proc Import
中使用 DATAROW
当 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;
但是SAS无法识别DATAROW
选项,报错:
ERROR 180-322: Statement is not valid or it is used out of proper order.
还有另一种从 Excel 导入 table 的方法,例如:
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;
有谁知道如何将行数未知的 table 从 .XLSM 导出到 SAS?
我找到了一个 "ineffective" 替代解决方案,它读取 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;
您可以使用 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 文件。
我想将 table 从 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 ... ...
问题是最后的行号未知,因为table长度今天可能是200行,明天可能是350行。
那么如何将 table 从 Excel (.XLSM) 导入 SAS-table?
我在某处读到我们可以在 Proc Import
中使用 DATAROW
当 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;
但是SAS无法识别DATAROW
选项,报错:
ERROR 180-322: Statement is not valid or it is used out of proper order.
还有另一种从 Excel 导入 table 的方法,例如:
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;
有谁知道如何将行数未知的 table 从 .XLSM 导出到 SAS?
我找到了一个 "ineffective" 替代解决方案,它读取 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;
您可以使用 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 文件。