2019年12月6日金曜日

[SGプロシジャ] スタイル属性の組み合わせ方法を設定する





SAS9.4で追加になった「ODS GRAPHICS の ATTRPRIORITY=オプション」をご紹介します。


この「ATTRPRIORITY=オプション」は、SGプロシジャでの「スタイル属性の組み合わせ方法」を設定することができます。
ていわれても意味不明かもしれないんで、とりあえず例を見てみましょうか。





「ATTRPRIORITY=オプション」の例


ATTRPRIORITY=COLOR

ods graphics / attrpriority=color;

proc sgplot data=sashelp.class;
    styleattrs datacontrastcolors=(blue orangedatasymbols=(circlefilled starfilled) ;
    scatter x=height y=weight / group=sex markerattrs=(size=12pt);
run;




  • 変数SEXをグループ変数として、シンボルを分けています。
  • 今回は説明しやすくするため、STYLEATTRSステートメントを使って、以下のスタイル属性を明示的に設定しています。
    • シンボルカラーを「BLUE」と「ORANGE」
    • シンボルを「円」と「星」


このスタイル属性に対して「ATTRPRIORITY=COLOR」は以下のイメージでグループごとの「スタイル属性の組み合わせ」を作ります。













1つ目のグループ「BLUE」と「円」の組み合わせ
2つ目のグループ「ORANGE」と「円」の組み合わせ
3つ目のグループ「BLUE」と「星」の組み合わせ
4つ目のグループ「ORANGE」と「星」の組み合わせ

というようにカラーを循環させて組み合わせていきます。





ATTRPRIORITY=NONE

ods graphics / attrpriority=none;

proc sgplot data=sashelp.class;
    styleattrs datacontrastcolors=(blue orangedatasymbols=(circlefilled starfilled) ;
    scatter x=height y=weight / group=sex markerattrs=(size=12pt);
run;



「ATTRPRIORITY=NONE」は以下のようなイメージです。



1つ目のグループ「BLUE」と「円」の組み合わせ
2つ目のグループ「ORANGE」と「星」の組み合わせ

というようにすべてのスタイル属性をグループごとに循環させていきます。





長所と短所



  • 「ATTRPRIORITY=NONE」とした方が見やすいグラフになりやすい

さきほどの「ATTRPRIORITY=COLOR」の例では、グループごとに「色違いの同じシンボル(円)」がPLOTされているのに対して、「ATTRPRIORITY=NONE」の例では、グループごとに「色もシンボルも異なる」PLOTができるので、当然見やすくなるわけです。



  • 「ATTRPRIORITY=COLOR」の方が、組み合わせを多く作れる

記事の最初に示した例では、2つの「シンボル」と2つの「色」をスタイル属性として定義しました。
これに対して「ATTRPRIORITY=COLOR」では4つの組み合わせが作れるのに対して、「ATTRPRIORITY=NONE」では2つしか作れません。


なにが言いたいかというと、たとえば以下の例をご覧ください。

ods graphics / attrpriority=none;

proc sgplot data=sashelp.class;
    styleattrs datasymbols=(circlefilled starfilled) datacontrastcolors=(blue orange);
    scatter x=height y=weight / group=age markerattrs=(size=12pt);
run;



変数AGEをグループ変数として、シンボルを分けていますが、異なるグループにも関わらず、同じシンボルとカラーが割り当てられてしまいました。


これは、スタイル属性が循環して使われるためです。
(たとえばカラー属性だと「BLUE」→「ORANGE」→「BLUE」→「ORANGE」という感じで、設定されている色を使い切ると循環して同じ色が使われる)

この循環は「ATTRPRIORITY=COLOR / NONE」どちらも起こり得ますが、使える組み合わせが少ないと、こういった不具合を起こしていしまいやすいですね。


0 件のコメント:

コメントを投稿