我使用xlwt将一堆csv文件转换成excel文件。之后,我需要导入这些excel文件到SAS (统计软件)。
在第一次尝试时,SAS抛出一个错误,指出文件格式无效。
但是,当我用MS Excel打开任何生成的文件并关闭时,没有做任何更改,也没有保存,文件成功地导入到SAS中。
我发现MS Excel更改了文件头,添加了当前用户名,并更新了文件的修改日期。
我想知道在保存之前是否可以修改excel文件的二进制头。
更新:我使用的是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.
发布于 2013-03-08 16:15:21
如果在Excel中打开工作簿并保存它可以让SAS正确地导入它,这(对我来说)就表明xlxt
中有一些缺陷(我对这个过程一无所知)。将Excel文件导入SAS是一个复杂的主题,因为有许多不同类型的Excel工作簿。
直接读取CSV文件并跳过向Excel的转换会容易得多。当您使用SAS PROC IMPORT读取CSV文件时,SAS会检查文件的前几行,以确定列类型。默认情况下,仅查看文件中的前20行,但您可以使用SASGUESSINGROWSGUESSINGROWS语句进行更改:
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;
以上是SAS9.2版的GUESSINGROWS的最大值;如果您使用的是9.3版,则最大值已增加到2,147,483,647。
https://stackoverflow.com/questions/15291693
复制相似问题