PRINTプロシジャ

Last-modified: 2008-11-14 (金) 20:37:42

PRINTプロシジャは,SASデータセットの内容を表示するプロシジャです.
データの値の長さや表示領域の大きさを考慮して,表示レイアウトを自動的に調整してくれるなど,手軽にデータの中身を確認できます.また,簡易な集計機能,グルーピング機能もあり,簡単なレポート出力にも利用できます.

proc print data=sashelp.class(obs=5);
run;

/*
OBS    Name       Sex    Age    Height    Weight

  1    Alfred      M      14     69.0      112.5
  2    Alice       F      13     56.5       84.0
  3    Barbara     F      13     65.3       98.0
  4    Carol       F      14     62.8      102.5
  5    Henry       M      14     63.5      102.5
 */

構文

PROC PRINT <オプション>;
  BY 変数 ..;
    PAGEBY 変数 ..;
    SUMBY 変数 ..;
  ID 変数 .. </ オプション>;
  SUM 変数 .. </ オプション>;
  VAR 変数 .. </ オプション>;

  WHERE 条件式;
  LABEL 変数=文字定数 ..;
  FORMAT 変数 .. フォーマット ..;
RUN;

PROC PRINTステートメント

PROC PRINT <オプション>..

PROC PRINTステートメントオプション

  • DATA=SASデータセット名
  • DATA=SASデータセット名(データセットオプション ..)
    表示するSASデータセット名を指定.デフォルトは,data=_last_ 最後に処理されたデータセットが対象となる
  • NOOBS
    オブザベーション番号を表示しない
  • OBS="文字列"
    オブザベーション番号の項目名を指定.指定がなければOBSと表示.
  • UNIFORM
  • WIDTH=UNIFORM
  • WIDTH=U
    ページが変っても,変数の表示長を同じに保つ
  • LABEL
    変数名ではなく,変数ラベルを表示する
  • SPLIT="区切り文字"
    指定された区切りで折り返した変数ラベルを表示する
  • ROWS=PAGE
    ひとつのオブザベーションのデータに対し,ページ内で折り返さず,1ページ1行のみの表示に制限する.
  • DOUBLE
    1行おきに表示する
  • N="文字列1" "文字列2"
    オブザベーション数を表示する.BYステートメントを併用した場合,グループ毎の数と総数を表示する.
    ROUND
    フォーマット指定のない数値変数を小数点2桁で四捨五入する
  • HEADING= V | H
    変数名を縦表記(Vを指定)または横表記(Hを指定).指定がなければ,SAS側で適時,縦横が決定される.
  • WIDTH= FULL | MINIMUM | UNIFORM | UNIFORMBY
    各変数の表示幅の決定方法を指定.FULLはフォーマット幅どおり,MINIMUMは,ページ毎に値の長さを見て最低限の幅を確保,UNIFORMBYは,BYグループ単位で統一して最低限の幅を,UNIFORMは,全体で統一して最低限の幅を確保する.
  • STYLE
  • CONTENTS=

VARステートメント

VAR 変数1 変数2 .. ;
VAR 変数1 変数2 .. / STYLEオプション;

表示する変数を指定する.列挙された順に左から表示される.
STYLEオプションについては,汎用的なオプションを参照のこと.

IDステートメント

ID 変数1 変数2 .. ;
ID 変数1 変数2 .. / STYLEオプション;

オブザベーション番号の代わりに行IDとして表示する変数を指定する.最左列に表示される.
STYLEオプションについては,汎用的なオプションを参照のこと.

SUMステートメント

SUM 変数1 変数2 .. ;
SUM 変数1 変数2 .. / STYLEオプション;

最終行に値の合計値を表示したい変数を指定する.
STYLEオプションについては,汎用的なオプションを参照のこと.

WHEREステートメント

WHERE 条件式;

表示対象となるオブザベーションを条件式に合致するものだけに制限します.
see also 汎用的なステートメント

FORMATステートメント

FORMAT 変数11 変数12 .. フォーマット1 変数21 変数22 .. フォーマット2 .. ;

変数の値を表示するフォーマットを指定します.
see also 汎用的なステートメント

LABELステートメント

LABEL 変数1="文字列1" 変数2="文字列2" .. ;

変数名の変わりに表示させるラベル名を指定します.
see also 汎用的なステートメント

BYステートメント

BY 変数1 変数2 ..;
BY 変数1 DESCENDING 変数2 ..;
BY 変数1 DESCENDING 変数2 .. NOTSORTED;

BY変数の値で分類された行ごとにサブグループにまとめて表示する.事前に指定された変数でソートされている必要があるが,列挙された順がキーの順になっており,降順ソートされている変数には,変数の前にDESCENDINGをつけなければならない.また,ソートされていない場合,最後にNOTSORTEDをつければ,指定された変数の値が変わる度に,サブグループにまとめられる.
see also 汎用的なステートメント

PAGEBYステートメント

PAGEBY BY変数1 BY変数2 ..;

BYステートメントで指定された変数(BY変数)の一部を指定し,その変数の値が変るところで,強制的に改ページを行う.BYステートメントが使われるときに限り使用できる.

SUMBYステートメント

SUMBY BY変数1 BY変数2 ..;

BYステートメントで指定された変数(BY変数)の一部を指定し,その変数の値が変るところで,SUMで指定された変数の小計を表示する.BYステートメントが使われるときに限り使用できる.SUMステートメントはなくてもよい.その場合は,IDステートメントやBYステートメントで指定されていないすべての数値変数(_NUMERIC_)に対し,小計が表示される.

サンプル

表示するデータセットを縦(オブザベーション)と横(変数)の両方向に制限した例を示します.まず,オブザベーションはWHEREステートメントでYEARを1990年代に絞った後,さらにデータセットオプションで,5-12番目の8つのオブザベーションのみを表示させています.変数については,VARステートメントで,MONTHとSALESの2変数に制限しています.最後にBYステートメントでYEAR単位にまとめ,SUMステートメントでSALESの小計と合計を集計しています.

proc print data=sashelp.retail(firstobs=5 obs=12);
  where 1990<=year<=1999;
  by year;
  var month sales;
  sum sales;
run;

/*
YEAR=1991

 OBS    MONTH         SALES

  45       1           $703
  46       4           $709
  47       7           $728
  48      10           $807
----             ----------
YEAR                 $2,947


YEAR=1992

 OBS    MONTH         SALES

  49       1           $692
  50       4           $797
  51       7           $826
  52      10           $889
----             ----------
YEAR                 $3,204
                 ==========
                     $6,151
 */

変数名と変数ラベルを両方表示したい

PRINTプロシジャは,変数名から変数ラベルのどちらかしか表示することができませんが,両方出てほしいと思う事はよくあります.簡単な解決方法としては,SASデータセットを作る際に,変数ラベルにあらかじめ変数名も書き込んでおく事です.
たとえば,

Data class;
  label age="age-年齢";
  label sex="sex-性別";
..
run;
proc print label;run;

変数が多いときは,エクセルなどの表計算ソフトを使って,変数名と変数ラベルの列から上記のようなLABELステートメントをつくり,貼り付けると多少は楽です.エクセルだと,セルA1に変数名,セルB1に変数ラベルがあるとすると,

=CONCATENATE("",A1,"=","""",A1,"-",B1,"""",";")

とCONCATENATE関数を使います.
また,変数ラベルに変数名を追加するマクロプログラムを使うと,変数ラベルに変数名を自動的に挿入してくれます.

サンプル表示

サンプルデータセットを作らずに、ささっとデータの概要を俯瞰したい時などに、簡単に表示する方法を示します。see also PRINTプロシジャ

最初の10件だけ、見たいとき

proc print data=_last_(obs=10);run;

最初の100件目から、110件目まで見たいとき

proc print data=_last_(firstobs=100 obs=110);run;

偏りをさけるため、ランダムに1/1000のサンプルを見たいとき

proc print;where ranuni(1)<0.001;run;

ランダム1/1000のサンプルの最初の10件だけを見たいとき

proc print data=_last_(obs=10);where ranuni(1)<0.001;run;