ラベル プロシジャ: PRINT の投稿を表示しています。 すべての投稿を表示
ラベル プロシジャ: PRINT の投稿を表示しています。 すべての投稿を表示

2017年6月21日水曜日

【SAS入門】データセットの中身を表示する【PROC PRINT】




SASデータセットの中身を見るには、、

  • データセットを直接開いて見る
  • PRINTプロシジャ等でデータセットの中身を出力して見る

といった方法があります。
今回は、PRINTプロシジャを使った方法を紹介します。(沢山機能があるので、基本の部分のみ紹介)



例① 基本構文

proc print data=SASHELP.CLASS;
run;

「data=」に表示したいデータセット名を指定します。
今回は「SASHELP.CLASS」を表示対象としています。

ここからステートメントやオプション等を追加して、出力をカスタマイズしていきます。
以下で紹介する機能は、オプションや設定等の組み合わせで、機能しなかったり挙動が変わる場合がある点だけ注意です。



例② VARステートメント
proc print data=SASHELP.CLASS;
   var NAME SEX AGE;
run;

VARステートメントで表示したい変数を指定することができます。




例③ LABEL、NOOBSオプション
* オプションなし ;
proc print data=SASHELP.BASEBALL;
   var NAME TEAM;
run;



* オプションあり ;
proc print data=SASHELP.BASEBALL label noobs;
   var NAME TEAM;
run;

LABELオプション・・・
通常、「オプションなし」の例のように列ヘッダーには変数名が表示されますが、LABELオプションを指定すると、変数ラベルを表示できます。

NOOBS・・・
通常、「オプションなし」の例のように一番左側に「OBS」という列が表示されますが、NOOBSオプションを指定すると、この列を非表示にできます。




例④ WHEREステートメント
proc print data=SASHELP.CLASS ;
  where AGE = 13;
run;

WHEREステートメントでオブザベーションの抽出条件を指定できます。
(上の例では、AGE=13のオブザベーションのみを表示しています)




例⑤ OBS=データセットオプション
proc print data=SASHELP.CLASS(obs=3);
run;

OBS=データセットオプションで、処理を停止するタイミングを指定できます。
(上の例では、3オブザベーションまでで処理を停止しています)

データセット名の後ろにカッコで囲んで指定します。

ちなみに、入門の範疇を少し超えますが、以下記事の通り、他の機能と組み合わせて使用する際は、その挙動にも注意です。

FIRSTOBS=, OBS=, WHERE を組み合わせたときの挙動



注意点

出力の設定がテキスト形式(ODS LISTING)になっている場合、変数に格納されている文字が長いと、文字切れを起こして途中までしか出力されません(ログにWARNINGが出ます)



PRINTプロシジャ利用時のヒント

PRINTプロシジャには不向きなデータがあります。

例えば、変数の数が多かったり、オブザベーション数が多い場合、
表示されたものが縦や横にながく見づらかったり、そもそもプロシジャの実行にめちゃくちゃ時間が掛かります。

素直にデータセット直接開いて中身見た方が早いです。

ただ、そういった場合でも、VAR、WHERE、OBS=などを組み合わせて、表示する変数やオブザベーションを絞るなどすれば、ある程度見やすくなります。



2016年4月11日月曜日

PRINTプロシジャで変数の数が多い時に使えるIDステートメント



以下のプログラムを実行すると変数が沢山出来ます。(変数NO, A1, A2, A3・・・A30)

*  サンプルデータ ;
data DT1;
  do NO=1 to 5;
     retain A1-A30 0;
     output;
  end;
run;


上のようなデータに対して、

「RTFに出力したい。データの中身を確認するだけだから、適当にPRINTプロシジャとかで出したやつでいいよ」

という状況があったとします。そこで以下のように書くと、、、

ods rtf file="出力するファイルのフルパスを指定";
   proc print data=DT1;
   run;
ods rtf close;

変数の数が多すぎて途中で折り返してしまいました。
これだと例えばNO=4のA27の値は・・・とかって見たいときに見辛いです。


そこでIDステートメントを使ってみます。
ods rtf file="出力するファイルのフルパスを指定";
    proc print data=DT1;
        id NO;
    run;
ods rtf close;

途中で折り返しても、IDステートメントに指定した変数が一番左側に表示されるようになるので、多少見やすくなります。


📝ちなみに

IDステートメントに指定した変数の「数が多い」か「格納値が長すぎる」と、
ログに長すぎるぞ!的なWARNINGが出て、IDステートメントが無効になることがあります。
ODS LISTINGでの出力時に発生したことがありますが、RTF等の他の出力時でも同様のことが起こるか不明なので、ログも要確認です。

また、今回の方法以外に、用紙の向きを横にして横幅を広げて見やすくするって方法もあるかと思います。
ODS出力時の用紙サイズや余白などを設定するオプション [まとめ]


2016年2月15日月曜日

REPORT(またはPRINT)プロシジャで罫線の引き方を設定する。


※ ODS RTF, PDF等、一部の出力先でのみ設定できます。詳細はリファレンスを参照下さい。
(設定可能なはずの一部のODS出力先で正しい動きをしない場合があったので、各自、各環境でテストしたほうが良さそうです)



構文


 PROC REPORT  STYLE( REPORT )=[ RULES=設定1  FRAME=設定2 ];
 RUN;



RULES = 内側の罫線
 指定 設定内容
 NONE  罫線なし 
 COLS   縦罫線のみ 
 ROWS  横罫線のみ 
 ALL   縦横すべて 
 GROUPS  表ヘッダーとデータの切り替わり部分に罫線を引く。
 データと表フッターの切り替わり部分にも罫線を引く 。
 表ヘッダーや表フッターがないと罫線は引かれない。

 FRAME = 外側の罫線
 指定 設定内容 
 VOID 罫線なし 
 ABOVE   上のみ 
 BELOW  下のみ 
 LHS   左のみ 
 RHS  右のみ 
 HSIDES 上下のみ   
 VSIDES  左右のみ 
 BOX  上下左右 



例

ods rtf file="出力パスを指定\TEST.rtf";

proc report data=SASHELP.CLASS(obs=5)
         style(header)=[background=white]
         style(report)=[rules=groups frame=hsides] ;
   column SEX NAME AGE;
   define SEX / display;
   define NAME / display;
   define AGE / display;
run;

ods rtf close;





関連

REPORTプロシジャ入門8:書式の設定【STYLE=】
【PROC REPORT】RTF出力時の細かい罫線の設定