SASでExcelのファイルを読み込む場合、PROC IMPORTを使う方法とLIBNAMEを使う方法があります。どちらの方法でもエンジンを利用します1。
エンジンは、ファイルからの読み取りやファイルへの書き込みを行うSASのコンポーネントです。各エンジンを使用することで、SAS Systemは特定の形式のファイルにアクセスできるようになります。エンジンには複数の種類があります。 SAS Help Center: SASエンジンの定義
Excelのファイルを扱うエンジンは、XLS、XLSX、EXCELの3種類です。
拡張子.xlsならXLSかEXCELを利用して、.xlsxならXLSXかEXCELを利用します。
詳しくはこのPDF(英語)に書いてありますが、ここでも簡単にまとめてみます。
Excelは閉じるように!
Excelでスプレッドシートを開いたままそのファイルをSASで読み込もうとするとエラーになるので注意。
XLSX
.xlsxファイルはLIBNAMEでもPROC IMPORTでも読み込めます。
XLSXファイルをLIBNAMEで読み込む
以下のようなdata.xlsxを用意しました。
Sheet1:
Name | Age | Color |
---|---|---|
Sato | 23 | Blue |
Suzuki | 19 | Green |
Smith | 28 | Red |
まずPROC CONTENTSを使って読み込むシートを見つけます。
/* マクロ変数にデータを保存しているパスを割り当てる */
%let path = C:\Files\sas;
libname mylib XLSX "&path\data.xlsx";
proc contents data=mylib._ALL_;
run;
最初に表示されるのはファイル全体の情報で、その後にスプレッドシート内の各シートの情報が表示されます。
該当するシートの「データセット名」をコピーします。シートごとに変数名などが表示されるので、読み込みたいシートを見つけてください。
今回読み込んだファイルにはSheet 1というシートしかありませんが、SASではMYLIB.SHEET1というデータセットとしてアクセスできます。
データセットをsetで読み込みます
%let path = C:\Files\sas;
libname mylib XLSX "&path\data.xlsx";
data exceldata;
set MYLIB.SHEET1;
run;
proc print data=exceldata;
run;
このように表が表示されたので、これでちゃんと読み込めました。
XLSXファイルをPROC IMPORTで読み込む
一つのシートしか読み込む必要がないのであれば、PROC IMPORTを使った方がシンプルかもしれません。
proc import datafile="&path\data.xlsx"
out = work.exceldata
dbms = xlsx
replace;
sheet ="Sheet1";
run;
PROC IMPORTステートメントのオプションなど:
OUTオプション
- 出力するSASデータセットを「ライブラリ参照名.データセット名」形式で指定する
DATAFILEオプション
- 入力するCSVファイルのパスとファイル名を指定する
DBMSオプション
- CSVファイルの場合は「CSV」を指定する
REPLACEオプション
- 出力データセットが存在したら置き換えを行なう場合に指定する
GETNAMESステートメント
- 先頭行を変数名として使う場合は「YES」を指定する
DATAROWステートメント
- データの開始行を指定する
XLS
XLSエンジンはLIBNAMEに対応していないので、PROC IMPORTを使います。
XLSファイルをPROC IMPORTで読み込む
%let path = C:\Files\sas;
proc import datafile="&path\data.xls"
out = work.exceldata
dbms = xls
replace;
sheet = "Sheet1";
run;
dbmsはxlsにします。
EXCELエンジンを使った場合
SASのWindows版を利用していて、Excelの64bit版を利用していれば、xlsファイルでもxlsxファイルでもEXCELエンジンを利用するという選択肢もあります。
EXCELを利用した場合、PROC CONTENTSで表示される「データセット名」も違うので注意が必要です。
LIBNAME
libname mylib EXCEL "&path\data.xlsx";
proc contents data=mylib._ALL_;
run;
data exceldata;
set MYLIB.'Sheet1$'n;
run;
proc print data=exceldata;
run;
PROC IMPORT
%let path = C:\Files\sas;
proc import datafile="&path\data.xlsx"
out = work.exceldata
dbms = excel
replace;
sheet ="Sheet1";
run;
proc print data=exceldata;
run;
dbmsはexcelを指定します。
LIBNAMEでエンジンを指定しなくても、PROC IMPORTのDBMSオプションを設定すると、裏でエンジンを利用してファイルを読み込んでくれるみたいです。→"DBMS=EXCEL uses the EXCEL LIBNAME engine transparently." SAS Help Center: Syntax: PROC IMPORT PROC IMPORT Statement