|
|
Microsoft Excelへのデータの複数シート出力について
[OS] Windows
[リリース] 8.2
[キーワード] WINDOWS, 8.2, EXCEL, DDE, SAS/ACCESS to ODBC
[質問]
複数のSASデータセットを、1つのMicrosoft Excelファイル(ブック)内で複数のシートに分けて出力する方法を教えてください。
[回答]
EXPORTプロシジャでは、同一ブック内の複数シートへの出力はできません。次の2通りの方法で出力する方法があります。
- DDE の機能(Base SAS)を使用してExcelシートに書き込む方法
- SAS/ACCESS to ODBCを用いてExcelシートに書き込む方法
具体的な説明とプログラム例をご紹介します。
- ■ DDE の機能を使用してExcelシートに書き込む方法
-
DDEは、Dynamic Data Exchange の略で、Microsoft社が提供しているWindowsアプリケーション間でのデータ交換に広く使用されているプロトコルです(DDEの詳細については、Microsoft社提供、市販されている書籍などでご確認ください)。
SASでは、このDDEプロトコルを利用して、MS-Excelにデータを出力することが可能です(※ MS-ExcelがSASと同じPCにインストールされていることが必要です)。
以下のプログラム例では、2つのシートに出力していますが、この部分を適宜変更することにより、さらに複数のシートに対して書き込むことができます。
OPTIONS NOXWAIT NOXSYNC;
X "start excel";
/* MS Excel を起動 */
DATA _null_;
x=SLEEP(10);
RUN;
/* Excelの起動を10秒待機 */
/* 待機時間は環境に応じて変えてください */
FILENAME ddedata DDE 'excel|sheet1!r1c1:r100c3';
/* DDEを利用したエクセル出力 */
/* シート1枚目 */
/* 乱数を使用して、サンプルを作成します */
DATA _null_;
FILE ddedata;
DO i = 1 TO 100;
x = RANUNI(i);
y = 10 + x;
z = x - 10;
PUT x y z;
END;
RUN;
/* Excelへの書き込みを待機 */
DATA _null_;
x=SLEEP(10);
RUN;
FILENAME ddedata2 DDE 'excel|sheet2!r1c1:r100c3';
/* シート2枚目 */
/* 乱数を使用して、サンプルを作成します */
DATA _null_;
FILE ddedata2;
DO i = 1 TO 100;
x = RANUNI(i);
y = 20 + x;
z = x - 30;
PUT x y z;
END;
RUN;
- ■ SAS/ACCESS to ODBCを用いてExcelシートに書き込む方法
-
- データソースとしてシステムまたはユーザーDSNを事前に定義します。
データソースの定義は、たとえばWindows 2000の場合は、[スタート] → [設定] → [コントロールパネル] → [管理ツール] → [データソース(ODBC)」の順で画面を開き、データソースを定義します。なお、詳細の定義方法につきましては、Microsoft提供のヘルプ等をご参照ください。
- ライブラリを割り当てます。
libname mylib odbc dsn=Excel;
/*データソース名をExcel とします。*/
/*上記データソースの設定で定義した名前を指定してください。*/
- 複数のシート別に出力します。下記の例では、sashelp.classのデータを利用しています。
DATA mylib.sheet1a;
SET sashelp.class;
RUN;
/* 新しくsheet1a を作成 */
DATA mylib.sheet2a;
SET sashelp.class;
RUN;
/* 新しくsheet2a を作成 */
- SASを終了せずに作成したExcelファイルをExcelから利用するには、暗黙的に適用されたロックを解除するために、ライブラリの割り当てを開放する必要があります。
libname mylib clear;
なお、Excelへの複数シート出力に関するサンプルのマクロを、下記のURLで公開しています。あわせてご参照ください。
URL:http://support.sas.com/kb/6/695.html
|