Microsoft Excelに変数名ではなく変数ラベルを出力する方法について(2)

[OS] Windows
[リリース] 8.2
[キーワード] WINDOWS, 8.2, EXPORT, VALIDVARNAME, Excel

[質問]

SASデータセットをMS-Excelにエクスポートする際、1行目に変数名ではなくラベルを出力することはできますか?

[回答]

Windows版SAS System 8でSAS/ACCESS to PC File Formats利用している場合、MS-Excel形式への出力にはEXPORTプロシジャを使用できますが、このプロシジャには変数名の代わりに変数ラベルを出力する機能はありません。このとき、変数ラベルを変数名に変換する操作を実施した後で、EXPORTプロシジャを利用する方法が考えられます。

変数名を変更するにはいくつかの方法が考えられますが、次の例ではビューを利用して出力用にデータセットを作成する方法をご紹介します。

なお、変数名に日本語や空白文字を利用する場合、VALIDVARNAME=ANYオプション(評価版)を利用することで表現可能です。この際の変数名の指定方法は、下記のとおりです。


  '変数名'n 

※ 変数ラベルが32バイトを超える場合、そのまま変数名には利用できず33バイト以降が切り捨てられます。このような場合は、適切な修正が必要となります。

       /* 変数ラベルを変数名にしたデータセットを作成するマクロ */

%MACRO change(libnm,dsnm,odsn);
  PROC SQL NOPRINT;
    SELECT COUNT(name) INTO :nobs
    FROM DICTIONARY.COLUMNS
    WHERE LIBNAME=UPCASE("&libnm") AND MEMNAME=UPCASE("&dsnm");
    SELECT NAME INTO :name1-:name%LEFT(&nobs)
    FROM DICTIONARY.COLUMNS
    WHERE LIBNAME=UPCASE("&libnm") AND MEMNAME=UPCASE("&dsnm");
    SELECT LABEL INTO :label1-:label%LEFT(&nobs)
    FROM DICTIONARY.COLUMNS
    WHERE LIBNAME=UPCASE("&libnm") AND MEMNAME=UPCASE("&dsnm");
  QUIT;

  DATA &odsn / VIEW=&odsn;
    SET &libnm..&dsnm(RENAME=(
    %DO I=1 %TO &nobs;
      %IF "&&label&I" NE "" %THEN %DO;
        &&name&I = "&&label&I"N
      %END;
    %END;
    ));
  RUN;
%MEND;

                                                     /* 利用例 */
                                             /* サンプルデータ */
                           /* 日本語のラベルがあるデータセット */
DATA test ;
  LABEL x='SAS Institute Japan' y='テクニカルサポート';
  x=1; y=2; z=3;
RUN;

                                     /* オプションを有効にする */
OPTIONS VALIDVARNAME=ANY;

                  /* WORK.TESTから変数ラベルを変数名に変換した */
                           /* データセットWORK.TEST2を作成する */
%change(work, test, test2);

                        /* Excel形式ファイルにエクスポートする */
PROC EXPORT DATA=test2 DBMS=Excel FILE='c:\test.xls' REPLACE;
RUN;

                               /* オプションをデフォルトに戻す */
OPTIONS VALIDVARNAME=V7;