COMPAREプロシジャの出力で、文字変数の値の全体を表示する

[OS] ALL
[リリース] ALL
[キーワード] COMPARE, OUT= option, OUTNOEQUAL option, OUTBASE option, OUTCOMP option

[質問]

COMPAREプロシジャで、データセットの比較をしています。
データセットに20バイトを超える文字変数が含まれていますが、結果出力では最初の20バイトしか表示されません。全体を表示させることはできますか。

[回答]

COMPAREプロシジャの結果出力で、文字変数の値を20バイトより増やすことはできませんが、結果をデータセットに出力する場合は、全体を出力できます。

以下の例では、COMPAREプロシジャのOUT=オプションを利用して、比較結果を一時データセットに出力し、PRINTプロシジャにより、OUTPUTへ出力しています。

例:COMPAREプロシジャでのOUT=オプションの指定例


                                              /* サンプルデータセット1 */
  DATA data1;
    LENGTH text $ 40;
    INPUT no text $;
  CARDS;
  1 aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd
  2 aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd
  3 aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd
  ;
  RUN;

                                             /* サンプルデータセット 2 */
  DATA data2;
    LENGTH text $ 40;
    INPUT no text $;
  CARDS;
  1 aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd
  2 aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd
  3 aaaaaaaaaabbbbbbbbbbccccccccccdddddddddx
  ;
  RUN;

                                              /* COMPAREプロシジャ実行 */
  PROC COMPARE BASE=data1 COMP=data2 
               OUT=diff OUTNOEQUAL OUTBASE OUTCOMP;     /* OPTION 指定 */
  RUN; 

                                              /* PRINTプロシジャで出力 */
  PROC PRINT DATA=diff;
  RUN;

各オプションの説明

OUT= 出力データセット名
OUTNOEQUAL すべての値が一致しているときは、オブザベーションを表示しない
OUTBASE BASE=で指定したデータセットのオブザベーションを表示する
OUTCOMP COMPARE=で指定したデータセットのオブザベーションを表示する

出力結果例


   OBS    _TYPE_     _OBS_     text                                         no

     1     BASE         3      aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd     3
     2     COMPARE      3      aaaaaaaaaabbbbbbbbbbccccccccccdddddddddx     3