変数内のデータが長い場合に、変数内の全ての情報を出力する

[OS] ALL
[リリース] ALL
[キーワード] BASE, LONG CHARACTER VARIABLE

[質問]

データセットの内容をすべて出力したいのですが、変数長が非常に長い場合(たとえば500バイト)には、LINESIZE=システムオプションで指定できる長さでは、内容が途中で切れてしまいます。
変数の内容を全て出力する方法はありませんか。

[回答]

データの内容をすべて出力するには、以下の3つの方法が考えられます。

■ HTMLファイルへ出力する
ODSの機能を利用して、変数をHTML形式で出力します。
その後、Microsoft Excelにコピーするなどして、見た目を調整することができます。

DATA test1(KEEP=a b);
  FORMAT a $6.
         b $500.;
  DO i=1 TO 3 ;
    a = 'TESTD'||LEFT(i) ;
    DO j=1 TO 500 BY 2 ;
      SUBSTR(b,j,2) = 'あ' ;
    END;
    OUTPUT;
  END;
RUN;

                                                               /* ODS 出力 */
ODS HTML FILE='c:¥test¥longvar.htm';
PROC PRINT DATA=work.test1;
RUN;
ODS HTML CLOSE;

■ 変数を印刷できる範囲の長さに区切って出力する
DATAステップで、該当の変数を、印刷できる範囲の長さの複数の変数に分割して出力します。

                                          /* SUBSTRまたは、KSUBSTRで区切る */
DATA test2(DROP=b);
  SET test1 ;
    b1 = KSUBSTR(b,1,50) ;
    b2 = KSUBSTR(b,51,50) ;
    b3 = KSUBSTR(b,101,50) ;
    b4 = KSUBSTR(b,151,50) ;
    b5 = KSUBSTR(b,201,50) ;
    OUTPUT;
RUN;
PROC PRINT DATA=WORK.TEST2;
RUN;

※ 印刷する前に印刷プレビューでイメージを確認してください

■ REPORTプロシジャのオプションを使用する
REPORTプロシジャのDEFINEステートメントで、WIDTH=オプションとFLOWオプションを指定して、変数を任意の長さで折り返して出力します。

PROC REPORT DATA=WORK.TEST1 NOWINDOWS;
  COLUMN a b;
                                   /* WIDTHオプションにより100文字で折り返し */
  DEFINE b /DISPLAY WIDTH=100 FLOW;
RUN;

※ WIDTH=の値は任意に調整してください

なお、REPORTプロシジャでFLOWオプションを使用する際に、変数内にDBCS(漢字などの2バイト文字)とSBCS(半角 英数字などの1バイト文字)が混在する場合、文字列が崩れて表示されることがあります。現在この問題を修正するためのHot Fix (修正ファイル)が用意されています。Hot Fixの適用を検討される場合は、弊社テクニカルサポートまでご連絡ください。