2019年12月14日土曜日

[KCHARLIST関数] 「アルファベット」や「数字」などの特定の文字列を返す





SAS9.4M5から追加になった「KCHARLIST関数」がいい感じです。


例1

data test;
   length x $500.;
   x = kcharlist("U");
run;



KCHARLIST関数で指定した「"U"」は「大文字のアルファベット」を意味しています。
ご覧の通り、戻り値として大文字のアルファベットが返されました。



このように特定の種類の文字をリストとして取得することができます。
「"U"」の他に以下なども指定可能です(一部抜粋)

  • "A"  =  大文字と小文字のアルファベット
  • "L"  =  小文字のアルファベット
  • "U"  =  大文字のアルファベット
  • ”D”  =  数字
  • ”F”  =  SAS名(変数名やデータセット名など)で有効な開始文字
...などなど



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」どちらも起こり得ますが、使える組み合わせが少ないと、こういった不具合を起こしていしまいやすいですね。