1

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.
4

1 に答える 1

2

ワークブックを Excel で開いて保存すると、SAS が適切にインポートできる場合、(私には) (xlxt私が何も知らないプロセスに) 何らかの欠陥があることを示しています。Excel ワークブックにはさまざまな種類があるため、Excel ファイルを SAS にインポートすることは複雑なトピックです。

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;

上記は、SAS バージョン 9.2 のGUESSINGROWSの最大値です。9.3 を使用している場合、最大値は 2,147,483,647 に増加しました。

于 2013-03-08T16:15:21.473 に答える