2013-03-08 81 views
1

我使用xlwt將一堆csv文件轉換爲excel文件。 之後,我需要將這些excel文件導入SAS(統計軟件)。將xlwt生成的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. 
+0

您如何使用SAS訪問Excel文件?即:ODBC擴展(注 - 我從2004年起就沒有使用過SAS!) – 2013-03-08 10:23:47

+1

另外 - 你可能更適合將CSV數據導入SAS – 2013-03-08 10:30:05

+0

感謝您的回覆。實際上,SAS正在被統計人員使用,並且他們描述導入csv文件的問題在於,SAS根據CSV文件的第一個原始數據設置字段大小。如果稍後在文檔中有更長的字符串在這個領域SAS有問題處理它們。 正如我所見,Excel文件是使用SAS查詢語言導入的。不知道我的定義是否正確。 – 2013-03-08 10:39:52

回答

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的SAS 9.2版本的最大值;如果你使用9.3,最大值已增加到2,147,483,647。

+1

絕對要走CSV路線。轉換爲Excel以將其轉化爲SAS就像在食用前腐爛你的香蕉。與CSV格式相比,SAS會比excel更好地工作。您也可以手寫輸入代碼而不是使用PROC IMPORT;那麼你可以直接指定每一列的格式/長度。 – Joe 2013-03-08 16:42:23

+0

謝謝!看起來是一個很好的解決方案。我和統計人員交談過,他們沒有使用「猜測」參數。等待他們的更新。 – 2013-03-12 08:26:12