エクセル読み込みのxlsxエンジン

>100 Views

October 21, 24

スライド概要

[第10回大阪sas勉強会]

profile-image

SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

エクセル読み込みの xlsxエンジン マルホ株式会社 山野辺

2.

ディスクレーマー  本発表は個人の見解に基づくものであり、所属組織を代表するものではありま せん。あらかじめご了承ください。  確認環境はPC-SAS, SAS Studioです。

3.

Libname エンジン?  業務環境にSAS/ACCESSライセンスがないが、業務上エクセルを読み込むこと が多く、エクセルファイルの取扱いに苦労していた  使えないからこそ、メリット/デメリットを把握しておきたかった  調べてみての差分、挙動の違いについて報告する

4.

SASでのエクセルファイルの読み込み

5.

SASでのExcelファイルの読み込み方-1  そもそもSASでExcelを読み込むには?  インポートウィザードに従えば、 GUI上で読み込み、かつGUIで指定したオプション を反映した SASプログラムまで生成してくれる (DBMSを指定したproc importプログラム)

6.

SASでのExcelファイルの読み込み方-2  そもそもSASでExcelを読み込むには?  DDE(Dynamic Data Exchange)を使って読み込む  MSでのサポートが明示されておらず、参照文献も限られ新規で作成するには難易度が高い

7.

SASでのExcelファイルの読み込み方-3  そもそもSASでExcelを読み込むには?  Proc importやlibnameステートメントを用いて読み込む →保存可能で、再現性もあり正道 →proc importは読み込みにしか使えないが、libnameは書き込みも可能 →この際に使用するエンジンを指定するがエンジンは[excel], [xlsx]が代表的に知られる

8.

xlsxエンジンとは  xlsxエンジンとは、libname statement中で指定するエンジン  SAS/ACCESS 9.4M2 Interface to PC Filesからあり、普及している認識  それまでのエクセル読み込みは[excelエンジン]を使っており、 エクセルファイルに対するデフォルトは引き続き [excelエンジン]となっている。  例) libname FILE “./test.xlsx”; 実 行 libname FILE excel “./test.xlsx”;

9.

エンジンの違い: excelエンジン  [excelエンジン]は仕様が古く使うメリットが低い メリット: ・xlsファイルが読み込める ・インポートウィザード生成のプログラムから、コピペで作成できる ・.xls、 .xlsx、.xlsb、.xlsm 、.mdb 、.accdbが対応可能 デメリット: ・(xlsxエンジンと比較しても)エンジンによる自動変換が生じる ・変数型の判定が自動で行われ、型はデータ先頭8行目までの値で判断 ・一部の値の読み込みが不完全(小数点深くの値が途中でロストする) ・Windows環境下での動作

10.

エンジンの違い: xlsxエンジン  [xlsxエンジン]は新しいものの、下位互換はない メリット: ・UNIX、Windowsで動作 (SAS Studioでも動く!) ・エクセルファイルの値をそのまま読みこむことが出来る。 デメリット: ・xls形式は読み込み不可,XLSXファイルのみ可能。 ・excelエンジンで使えていた一部のオプションが使用不可 ・変数名がEXCEL準拠(F1, F2,….やCol1, Col2…ではなくA, B, C,…,AA,AB,…)

11.

他の違い  XLSXエンジンは逐次読み込みのため、時間がかかる(ランダムアクセス不可)。  上記理由に関連して、データセットに落とさず直接プロシジャで呼び出すと実 行不可能なものがある(RANKプロシジャ等)  XLSXエンジンはDBCS(double byte character set)をサポート 等、別エンジンであるため、違いはいくつもある。

12.

エンジン間のオプションの違い 共通オプションは のみ。 また、excelエンジンでは、 getnamesはlibname時にも使えた が、xlsxエンジンではlibnameで 使えずに、proc import時にしか 使えない等の挙動の違いもある 単純なエンジン名の置換のみでは excel→xlsxへの変更は不可! File Format-Specific Reference for the IMPORT and EXPORT Procedures https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/acpcref/n0msy4hy1so0ren1acm90iijxn8j.htm

13.

excelエンジン→xlsxエンジンへの移行  別エンジンであるため、値やフォーマット、変数名のルールに互換はない  SASに読み込んだデータセットを同一にするにはデータステップでの加工が必須

14.

乗せ換え例 例:    変換元A:Excelエンジン libname DT1 excel “test.xlsx” access=readonly; data SASDT1; set DT1.sheet1; run; 変換元B:Excelエンジン proc import datafile=“test.xlsx” out=SASDT1 DBMS=excel; range=“sheet1 "; run; 変換後:XLSXエンジン proc import datafile=“test.xlsx” out=SASDT1 DBMS=xlsx; range=“sheet1 "; run; →作成したSASDT1は完全に同じとは言えず、変数名や値、当てられるformatが異なる →コンマ以下の深い値がなければ、変数名を整え、日付にさえ気を遣えば、似たように取り扱えそう?

15.

乗せ換え例  先頭行がラベル行の場合は、 (SAS変数名ルールから逸れない限り)似たような形で読み込める  変換元A:Excelエンジン libname DT1 excel “test.xlsx” getnames=YES; data SASDT1; set DT1.sheet1; run;  変換元B:Excelエンジン proc import datafile=“test.xlsx” out=SASDT1 DBMS=excel; getname=YES; range=“sheet1 "; run;  変換後:XLSXエンジン proc import datafile=“test.xlsx” out=SASDT1 DBMS=xlsx; getname=YES; range=“sheet1 "; run;

16.

乗せ換え例  先頭行がラベル行ではない場合(Getnames=No)の場合は、 変数名が「F1, F2, F3…」と「A, B, C,….,AA,AB」と異なるので、同じように扱 おうとするとrenameの必要性・・・  変換後:XLSXエンジン proc import datafile=“test.xlsx” out=SASDT1 DBMS=xlsx; getname=NO; run; data SASDT2; set SASDT1; rename A=F1 B=F2 ….; run;

17.

まとめ  XlsxファイルをPC-SASから読み込む場合は、xlsxエンジンが無難。  古いシステムから出力されたファイルで[.xls]形式の場合は、excelエンジンを 使わざるを得ない  Excelエンジンからxlsxエンジンへの容易な置き換えは不可  エクセルファイルの読み込みは、SASによる自動変換に十分注意

18.

参照・参考文献 LIBNAME Statement: Access and Excel Engines https://documentation.sas.com/doc/ja/pgmsascdc/9.4_3.5/acpcref/n1wvmggex roxgyn17rp61jml3cvn.htm LIBNAME Statement: XLSX Engine https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/acpcref/n0oj9f6i83 8mymn148890ckla700.htm Microsoft Workbook Files https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/acpcref/n0msy4hy1 so0ren1acm90iijxn8j.htm