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シートに書き込む方法
  1. データソースとしてシステムまたはユーザーDSNを事前に定義します。
    データソースの定義は、たとえばWindows 2000の場合は、[スタート] → [設定] → [コントロールパネル] → [管理ツール] → [データソース(ODBC)」の順で画面を開き、データソースを定義します。なお、詳細の定義方法につきましては、Microsoft提供のヘルプ等をご参照ください。

  2. ライブラリを割り当てます。
    
    libname mylib odbc dsn=Excel;
                                  /*データソース名をExcel とします。*/
          /*上記データソースの設定で定義した名前を指定してください。*/
    
    

  3. 複数のシート別に出力します。下記の例では、sashelp.classのデータを利用しています。
    
    DATA mylib.sheet1a;
     SET sashelp.class;
    RUN;
                                            /* 新しくsheet1a を作成 */
    DATA mylib.sheet2a;
     SET sashelp.class;
    RUN;
                                            /* 新しくsheet2a を作成 */
    
    

  4. SASを終了せずに作成したExcelファイルをExcelから利用するには、暗黙的に適用されたロックを解除するために、ライブラリの割り当てを開放する必要があります。
    
    libname mylib clear;
    
    

なお、Excelへの複数シート出力に関するサンプルのマクロを、下記のURLで公開しています。あわせてご参照ください。

URL:http://support.sas.com/kb/6/695.html