2013-03-08 2 views
1

Я преобразовал кучу csv-файлов в файлы excel с помощью xlwt. После этого мне нужно импортировать эти файлы excel в SAS (статистическое программное обеспечение).Импорт xlwt генерируемых файлов excel в SAS

С одной попытки SAS выдает сообщение об ошибке, указывающее, что формат файла недействителен.

Но когда я только открываю любой из сгенерированных файлов с помощью MS Excel и закрываю без каких-либо изменений и без сохранения файла, он успешно импортируется в SAS.

Я обнаружил, что MS Excel изменяет заголовок файла, добавляя туда текущее имя пользователя и обновляющий файл, измененный датой.

Интересно, есть ли возможность изменить файл двоичного файла excel, прежде чем сохранять его.

Update: Я использую xlwt версии 0.7.4, Python 2.7.3, SAS 9.3, Excel 2010, Windows 7 32бит.

Это часть моего кода, где я преобразовать CSV в Excel:

wb = xlwt.Workbook(encoding='latin-1') 
ws = wb.add_sheet('Sheet1') 
sourceCSV = csv.reader(open(files, 'rb'), delimiter=";") 
for rowi, row in enumerate(sourceCSV): 
    for coli, value in enumerate(row): 
     ws.write(rowi, coli, value) 
wb.save(xls_file) 

Вот варианты используются с функцией импорта SAS:

... 
DBMS=EXCEL REPLACE; 
RANGE="Sheet1$"; 
GETNAMES=YES; 
MIXED=NO; 
SCANTEXT=YES; 
USEDATE=YES; 
SCANTIME=YES; 
... 

Это ошибка производит SAS:

ERROR: Connect: External table is not in expected format. 
ERROR: Error in the LIBNAME statement. 
+0

Как вы используете SAS для доступа к файлу Excel? т.е.: расширение ODBC (примечание - я не использовал SAS с 2004 года!) –

+1

В стороне - вам, вероятно, лучше просто импортировать CSV-данные в SAS –

+0

Спасибо за ответ. Фактически, SAS используется статистиками, и поскольку они описали проблему с импортом файлов csv, SAS задает размер поля на основе первого исходного файла CSV. Если позже в документе есть более длинные строки в этом поле, SAS имеет проблемы с их обработкой. Файлы Excel импортируются с использованием языка запросов SAS, как я видел. Не уверен, что мое определение правильное. –

ответ

2

Если вы открываете книгу в Excel и сохраняете ее, SAS может импортировать ее должным образом, (мне), что есть некоторый дефект в xlxt (процесс, о котором я ничего не знаю). Импорт файлов Excel в SAS является сложной темой из-за множества разных типов книг Excel.

Было бы намного проще прочитать файл CSV и пропустить преобразование в Excel. Когда вы используете PROC IMPORT, чтобы прочитать CSV-файл, SAS проверяет первые несколько строк файла для определения типов столбцов. По умолчанию, SAS будет смотреть только на первые 20 строк в файле, но вы можете изменить это с GUESSINGROWS заявление:

proc import datafile="C:\temp\test.csv" 
    out=mydataset 
    dbms=csv 
    replace; 
    getnames=yes; /* Uses first row in CSV for column names */ 
    guessingrows=32767; 
run; 

Выше максимальное значение для GUESSINGROWS для версии 9.2 SAS; если вы используете 9.3, max увеличился до 2,147,483,647.

+1

Определенно пройдите по маршруту CSV. Преобразование в Excel, чтобы получить его в SAS, похоже на гниение вашего банана перед его употреблением. SAS будет работать намного лучше с CSV-форматом, чем с Excel. Вы также можете вручную написать код ввода, а не использовать PROC IMPORT; то вы можете указать каждый формат/длину столбца напрямую. – Joe

+0

Спасибо! Похоже на хорошее решение. Я разговаривал со статистиками, и они не использовали параметр «guessingrows». Ожидание обновления от них. –

Смежные вопросы