ラベル [▼ ODSTABLEプロシジャ入門 の投稿を表示しています。 すべての投稿を表示
ラベル [▼ ODSTABLEプロシジャ入門 の投稿を表示しています。 すべての投稿を表示

2017年3月7日火曜日

ODSTABLEプロシジャ入門3:変数の設定【DEFINE COLUMN】


出力する変数に対して、オプションを設定する方法を紹介。



基本構文

  PROC ODSTABLE  ・・・;
       DEFINE  COLUMN   出力変数名;
             オプション ;
       END;
  RUN;


または、以下のように事前にCOLUMNステートメントで出力変数名を記述していれば、、
  PROC ODSTABLE  ・・・;
       COLUMN   出力変数名1   出力変数名2 ・・・ ;

       DEFINE  出力変数名1;
             オプション ;
       END;
  RUN;

「DEFINE COLUMN 出力変数名」ではなく「DEFINE 出力変数名」というように縮めて書けます。



オプション一覧(一部)

※ 設定可能なオプションは rtf, html 等の出力先毎に違う&オプションの組み合わせで挙動が変わる事があるので、リファレンスも要参照です。

設定設定内容
header = "列ラベル"

列ラベル
text_split = "改行用区切り文字"

データ部分の改行用区切り文字
blank_dups = on

前のオブザベーションの値と同じだったら値を非表示にする
  • フォーマット適用後の値に対して動作する
  • 他のオプションと組み合わせて挙動を変えることが出来る(記事の下の方に例を載せてます)
vjust = top | center | bottom

縦位置
justify = on
just 
= right | center | left 

横位置
  • 列ラベルも横位置が設定されます(define headerとかで設定していない場合)
style = {書式設定}

  • ods listing以外の出力先(rtf, html等)で設定可能。
    設定できる書式はods出力先毎に違います。記述方法や注意点等とあわせ、リファレンスをご確認下さい。
  • {書式設定} の部分はproc reportでの書き方と似てるので、以下リンク先の記事も参考になると思います


では例をいくつか見ていきましょう。


Sample data

proc sort data=SASHELP.CLASS out=CLASS;
  by AGE WEIGHT;
  where AGE in (13,14);
run;


例①

proc odstable data=CLASS;
  column AGE SEX NAME ;
  define SEX;
      header = "せいべつ";
  end;
run;

変数SEXの列ラベルを「せいべつ」に変えています。


例②

proc odstable data=CLASS;
  column AGE SEX NAME ;
  define SEX;
      define header HEAD_SEX;
         text "せい#べつ";
         split = "#";
      end;
      header = HEAD_SEX;
  end;
run;

ちょっとしたテクニック。
define column内にdefine headerを定義することで、header=オプションで参照することが出来ます。


例③

proc odstable data=CLASS;
  column AGE SEX NAME;
  define AGE;
     blank_dups = on;
  end;
  define SEX;
     blank_dups = on;
  end;
run;

「blank_dups = on」で、前のオブザベーションと同じ値だったら値を非表示に。


また、「classlevels = on」というオプションを設定すると「blank_dups = on」の挙動が変わります。

proc odstable data=CLASS;
  column AGE SEX NAME;
  classlevels = on;

  define AGE;
     blank_dups = on;
  end;
  define SEX;
     blank_dups = on;
  end;
run;

本来、4オブザベーション目のSEXの値「F」は非表示になるはずですが「classlevels = on」によって挙動が変わりました。
「blank_dups = on」を設定した変数内で、i番目の列(AGE)の値が非表示になっていなければ、i+1番目の列(SEX)の値も非表示にしない、という挙動になります。



ODSTABLEプロシジャ入門記事一覧

1.基本構文【COLUMN】
2.ヘッダー・フッター【DEFINE HEADER, FOOTER】
3.変数の設定【DEFINE COLUMN】


2017年1月31日火曜日

ODSTABLEプロシジャ入門2:ヘッダー・フッターの設定【DEFINE HEADER、FOOTER】



ヘッダー・フッターの設定方法を紹介していきます。


基本構文

  PROC ODSTABLE  ・・・;
       COLUMN   ・・・ ;

       DEFINE  HEADER   適当なヘッダー名;
             TEXT   "表示するテキスト " ;
             オプション ;
       END;

  RUN;



例①

proc odstable data=SASHELP.CLASS;
  column NAME AGE SEX WEIGHT HEIGHT;
  define header MYHEAD1;
     text "ABCDE";
  end;
run;


ちなみにTEXTステートメントで文字を改行する方法の一つとして、、

proc odstable data=SASHELP.CLASS;
  column NAME AGE SEX WEIGHT HEIGHT;
  define header MYHEAD1;
     text "#ABC#DE";
  end;
run;

後で説明するSPLIT=オプションが設定されていない状態で、先頭の1文字目が以下のいずれでもない場合、その文字を改行用の文字に設定できます。
  • 次の半角文字:英数字, スペース, アンダーバー(_), ハイフン(-), ピリオド(.), パーセント(%)
  • 日本語等のマルチバイト文字(リファレンスに記載がないので検証が必要です)
 

例②

proc odstable data=SASHELP.CLASS;
  column NAME AGE SEX WEIGHT HEIGHT;
  define header MYHEAD1;
     text "ABCDE";
  end;
  define header MYHEAD2;
     text "FGHIJ";
  end;
run;

define header を複数定義すると、縦に積み重ねて出力することが出来ます。


例③

proc odstable data=SASHELP.CLASS;
  column NAME AGE SEX WEIGHT HEIGHT;
  define header MYHEAD1;
     text "ABCDE";
     start=NAME;
     end=AGE;
  end;
  define header MYHEAD2;
     text "FGHIJ";
     start=SEX;
     end=HEIGHT;
  end;
run;

「start=変数名」 と 「end=変数名」 を設定するとヘッダーの表示範囲を指定できます。
上記の例では
1つ目のヘッダーに「NAME~AGE」、
2つ目のヘッダーに「SEX~HEIGHT」
の範囲でヘッダーを割り当てています。


例④

proc odstable data=SASHELP.CLASS;
  column NAME AGE SEX WEIGHT HEIGHT;
  define header MYHEAD1;
     text "ABC#DE";
     split="#";
     just=left;
     style={color=blue};
  end;
run;

ヘッダーに様々なオプションを設定できます。

①「split="#"」 でヘッダーに「#」の文字が入ってたら改行するよう設定。("#" じゃなくても好きな半角文字を設定できます)
②「just=left」 でヘッダーの文字を左詰めに。
③「style={color=blue}」 で文字色を青に。

ods listing以外の出力先(rtf, html等)では「style={ 書式 }」で、ヘッダーの書式設定ができます。
設定できる書式はods出力先毎に違います。
記述方法や注意点等とあわせ、リファレンスをご確認下さい。


以下proc reportのstyleオプションの記事も参考になるかと思います。



例⑤

proc odstable data=SASHELP.CLASS (obs=5);
  column NAME AGE SEX WEIGHT HEIGHT;
  define footer MYFOOT1;
     text "ABCDE";
  end;
run;

define footer でフッターの設定が出来ます。
構文はdefine header と一緒。



おまけ

以下のように、headerステートメントをつかって最初にヘッダーであることを明示する書き方もあります。

*** 今までの書き方 ;
proc odstable data=SASHELP.CLASS;
  column NAME AGE SEX WEIGHT HEIGHT;
  define header MYHEAD1;
     text "ABCDE";
  end;
run;

 ↓↓↓

*** headerステートメントを使う書き方 ;
proc odstable data=SASHELP.CLASS;
  column NAME AGE SEX WEIGHT HEIGHT;
  header MYHEAD1;
  define MYHEAD1;
     text "ABCDE";
  end;
run;


footerステートメントを使って、フッターに対しても同様の書き方が出来ます。



ODSTABLEプロシジャ入門記事一覧

1.基本構文【COLUMN】
2.ヘッダー・フッター【DEFINE HEADER, FOOTER】
3.変数の設定【DEFINE COLUMN】


2017年1月18日水曜日

ODSTABLEプロシジャ入門1:基本構文【COLUMN】



ODSTABLEプロシジャはデータセットの中身を出力するREPORTプロシジャに似た動きをします。
以下記事を見て頂くと概要がつかめると思います。

PROC ODSTABLEによるレポート出力



基本構文

  PROC ODSTABLE   DATA=データセット名 ;
       COLUMN   変数名1  変数名2   変数名3  ・・・ ;
  RUN;

・ COLUMNステートメントに出力したい変数を列挙していきます。


例①

proc odstable data=SASHELP.CLASS ;
   column NAME AGE SEX HEIGHT WEIGHT;
run;

列ヘッダーの部分は、
・変数ラベルを持つ変数は「変数ラベル」が表示されます
・変数ラベルを持たない変数は「変数名」が表示されます



例②

proc odstable data=SASHELP.CLASS ;
   column NAME (AGE SEX) HEIGHT WEIGHT;
run;



カッコで囲んだ変数は縦に積み重ねて出力することが出来ます。
今回はAGEとSEXを縦に表示していますね。
列のヘッダー部分は、カッコ内で最初に出力される変数のみ表示されます。


例③

proc odstable data=SASHELP.CLASS ;
   column NAME (AGE SEX) (HEIGHT WEIGHT);
run;


「AGE SEX」、「HEIGHT WEIGHT」を縦に積んで表示しています。


例④

proc odstable data=SASHELP.CLASS ;
   column NAME (AGE SEX) * (HEIGHT WEIGHT);
run;



例③と似てますが、カッコ同士の間に 「*」 を入れると少し挙動が変わります。
分かりやすく色をつけると、、

column (AGE SEX) * (HEIGHT WEIGHT) ;

「AGE HEIGHT」、「SEX WEIGHT」という感じで縦に積んで表示します。



ODSTABLEプロシジャ入門記事一覧

3.変数の設定【DEFINE COLUMN】