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月27日金曜日

【SAS入門】データセットを保存する。





ライブラリ参照



SASには「ライブラリ参照」という考えがあります。以下の例をご覧ください。

 libname  MYLIB "C:\TEST";

フォルダパス「C:\TEST」の中を、「MYLIB」という名前で参照できるようにしています。
この参照の事を「ライブラリ参照」といいます。



構文
LIBNAME  適当な参照名  "フォルダのパス";




データセットの保存


このライブラリ参照「MYLIB」にデータセットを保存するには、以下のように書きます。

data MYLIB.OUT1;
   ~ 適当なデータステップ ~;
run;

MYLIB(つまりC:\TESTの中)にOUT1というデータセット名で保存しています。





保存したデータセットの参照


保存したデータセットを以下のような感じで参照できます。

* 例1 ;
data DT2;
   set MYLIB.OUT1;
run;


* 例2 ;
proc print data=MYLIB.OUT1;
run;




補足


参照名を省略した場合、たとえば以下のような場合、、

data DT1;
   A=1;
run;


内部で以下のように置き換えて実行されます。

data WORK.DT1;
   A=1;
run;


ライブラリ参照「WORK」は、SASが勝手につくるライブラリです。
WORKはSAS終了時に削除されます。

なので、一時ファイルを格納する場所になります。


ただし、この補足で説明した挙動は、「USER」という特殊なライブラリを定義すると変わってしまうので注意。
(あまり使われない&知られていない機能なので説明は割愛します)



2017年1月25日水曜日

「ODS RTF STARTPAGE=NO」でプロシジャ毎に改ページされるのを抑制する。



ODS RTF の中で、複数のプロシジャを実行すると、通常プロシジャ毎に改ページが入ります。
以下のように 「STARTPAGE=NO」 を加えることで、プロシジャ毎の改ページが抑制されます。

ods rtf  file="出力先のパス\test.rtf"  startpage=no;

      proc sgplot data=SASHELP.CLASS;
           scatter x=WEIGHT y=HEIGHT / group=AGE;
      run;

      proc means data=SASHELP.CLASS;
           var WEIGHT HEIGHT;
           class SEX;
      run;

ods rtf close;






以下のように 「ODS RTF STARTPAGE=YES;」 と書けば、そこからSASのデフォルト設定の挙動に戻せます。

ods rtf  file="出力先のパス\test.rtf"  startpage=no;

      proc sgplot data=SASHELP.CLASS;
           scatter x=WEIGHT y=HEIGHT / group=AGE;
      run;

      proc means data=SASHELP.CLASS;
           var WEIGHT HEIGHT;
           class SEX;
      run;

ods rtf  startpage=yes;

      proc means data=SASHELP.CLASS;
           var AGE;
           class SEX;
      run;

ods rtf close;



2017年1月20日金曜日

プロシジャの出力結果を画像ファイルとして保存する方法



ODSグラフを画像ファイルとして保存する方法は以下で紹介しています。


今回は、グラフ以外のプロシジャ(PROC PRINT, MEANS, FREQなど)の結果を画像ファイルとして保存する方法を紹介します。


以下は、PROC REPORT の結果をPNGファイルとして保存する例です。

options printerpath=png;

ods printer file='出力するパスを指定\TEST.png';
   proc report data=SASHELP.CLASS;
           column NAME AGE SEX;
           define NAME / display;
           define AGE / display;
           define SEX / display;
   run;
ods printer close;



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】


2017年1月13日金曜日

カラー名の取得


※SAS9.4で動作確認したプログラムです。他のバージョンで動くか確認していません。


グラフとかレポートで色を設定することってよくありますよね。例えばグラフでシンボルの色を指定したりとか。
その指定する色の名前を以下で取得できます。

proc registry list startat="colornames";
run;

ログ
[  colornames]
  Active="HTML"
[    HTML]
    AliceBlue=hex: F0,F8,FF
    AntiqueWhite=hex: FA,EB,D7
    Aqua=hex: 00,FF,FF
    Aquamarine=hex: 7F,FD,D4
    Azure=hex: F0,FF,FF
    Beige=hex: F5,F5,DC
    Bisque=hex: FF,E4,C4
    Black=hex: 00,00,00
    BlanchedAlmond=hex: FF,EB,CD
    Blue=hex: 00,00,FF
    BlueViolet=hex: 8A,2B,E2
    BR=hex: A5,2A,2A

・・・長いので省略・・・



ログに出力された、AliceBlue とか AntiqueWhite とかがカラー名です。

2017年1月11日水曜日

2017年もよろしくお願いします!


中身のない記事ですが、今年も一緒にSASを楽しみましょう!

filename ft15f001 temp;

proc explode;
parmcards;
1 LET'S ENJOY SAS
2 TOGETHER
3 THIS YEAR TOO!
;
run;


。。。SAS Studioだと、結果がでないので、
ログ・アウトプットを外部ファイルに出力する。で紹介したPRINTTOプロシジャで、出力結果をテキストファイルとして保存し、SAS Studio上でそのテキストファイルを開くと、見れると思います。