2015-10-09 4 views
0

Я хочу перенести таблицу из Excel в SAS (версия 9.2 и формат файла Excel - .XLSM, макрос). Имена столбцов будут считаны из ячейки B3, и данные будут исходить из ячейки B4, как показано ниже:Импорт таблицы с неизвестной длиной из Excel .xlsm

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; 

Однако SAS не может распознать опцию DATAROW, что дает ошибку:

ERROR 180-322: Statement is not valid or it is used out of proper order.

Там есть еще один способ таблицы импорта из Excel:

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; 

Кто-нибудь знает, как экспортировать таблицу с неизвестным количеством строк из .XLSM в SAS?

ответ

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; 
0

Вы можете использовать прямое подключение к Excel с помощью libname заявление:

libname xlsFile Excel 'C:\\thepath\excelfile.xlsm'; 

data want; 
    set xlsFile.'Sheet1$'n(firstobs=3); 
    where NOT missing(Col1); 
run; 

Это предполагает, что у вас есть Excel установлен на сервере SAS и приобрели SAS/ДОСТУП к ПК файлов.

+0

Спасибо. Но уверены ли вы, что это правильный стиль письма со всеми кавычками и всеми другими буквами? Потому что я написал ту же структуру, но мой SAS застрял внутри процесса, и я должен был прекратить мой SAS. – user3714330