2019年10月26日土曜日

データステップでOSのコマンドを実行する「CALL SYSTEM」




データステップでOSのコマンドを実行する「CALL SYSTEM」をご紹介します。
これあんまり知られてない気がする。



例1 (Windows環境)
options noxwait;

data _null_;
    call system( "start excel" );
run;

  • 上の例では「call system( "start excel" )」でExcelを起動するOSのコマンドを生成してます。
  • OSのコマンド実行時にコマンドプロンプトが開かれてSASの処理が一時停止状態になります。システムオプション「noxwait」を設定すると、コマンド実行後にコマンドプロンプトを自動で閉じてSASの処理を継続させます。

なんといっても、データステップでOSのコマンドが生成できちゃうのが魅力ですね。


2019年10月16日水曜日

マクロの実行を中止する「%RETURNステートメント」




  • %RETURNステートメント」でマクロの実行を中止します。
  • 「%RETURN」が書かれたとこから中止される。
  • 「親マクロ」の中に「子マクロ」を入れたネスト構造のマクロで、「子マクロ」の中のみに%RETURNを指定した場合は「子マクロ」のみ中止される。




私はよく以下のような感じで使ってます。



%macro test( in_ds=, out_ds= );
 
    * 引数チェック ;
    %if %sysfunc( exist( &in_ds ) ) = 0 %then %do;
         %put WARNING: データセット &in_ds が存在しません. マクロTESTを中止します;
         %return;
    %end;

    * 引数チェックをクリアしたあとの処理 ;  
    data &out_ds;
        set &in_ds;
    run;

%mend;
%test( in_ds=work.aaa, out_ds=bbb )


ログ




最初にマクロの引数がちゃんと正しく設定されてるか確認して、正しくない場合、

  • WARNINGとかのメッセージを出して、
  • %RETURNでマクロを中止させる。

みたいな流れです。


2019年10月14日月曜日

「SASデータセット」や「外部ファイル」の存在確認




  • EXIST関数・・・「SASデータセット」の存在確認をする。
  • FILEEXIST関数・・・「外部ファイル」の存在確認をする。
  • 存在する場合「1」、存在しない場合「0」が返される。




data test;
    x = exist( "sashelp.class" );
    y = fileexist( "c:\test/test.xlsx" );
run;



記事の内容うっすい・・

2019年10月6日日曜日

ODS LAYOUT GRIDDED入門: 「ODS REGION」の活用





「ODS REGION」ではオプションを設定することができます。
領域内の幅や高さ、配置場所など、詳細な設定を行うことができます。




構文

ODS REGION  オプション;


オプション
 指定 設定内容 
width =
height =
領域の横幅
領域の高さ
column =
row =
何列目の領域に配置するか
何行目の領域に配置するか
column_span =
row_span =
結合する領域の列数
結合する領域の行数
description = "テキスト"代替テキスト
style = [スタイル]レイアウトのスタイル



ods layout gridded
  columns=2 rows=2 column_gutter=0in row_gutter=0in;

 ods region column=1 row=1;
 proc freq data=sashelp.class;
   tables sex;
 run;

 ods region column=2 row=2;
 proc means data=sashelp.class n mean std;
   var height weight;
 run;

ods layout end;





記事一覧

1. 基本構文
2. ODS REGION


2019年10月3日木曜日

「ODS LAYOUT GRIDDED」の「ADVANCE=オプション」



ODS LAYOUT」は「ODS HTML」「ODS PRINTER(PDF等)」「ODS PowerPoint」での出力のみサポートされてるのでご注意を。



まずは以下記事をご覧ください。
ODS LAYOUT GRIDDED入門



今回は上の記事の「ADVANCE=オプション」を詳しく解説したいと思います。



通常は「ODS REGION」を指定して、次の領域に出力を移動させますが、
「ADVANCE=オプション」で、「次の領域に出力を移動させるルール」を新たに設定できます。



ADVANCE=」の設定値
設定値内容 
bygroupBYグループごとに領域を移動
explicit「ODS REGION」が指定されない限り領域を移動しない(デフォルト)
procプロシジャごとに領域を移動
table表ごとに領域を移動
output出力ごとに領域を移動

(「table」と「output」の違いがよく分からない・・テストしてみたけど同じじゃないの?)




例1
ods layout gridded columns=2 column_widths=(3in 3in) advance=bygroup;

 ods region;
 proc sgplot data=sashelp.cars;
   scatter x=msrp y=enginesize;
   by make;
 run;

ods layout end;



「ADVANCE=BYGROUP」として、BY値ごとにグラフを格子状に配置させています。



例2
ods layout gridded columns=2 column_widths=(3in 3in) advance=table;

 ods region;
 proc univariate data=sashelp.class;
    var height;
 run;

ods layout end;



「ADVANCE=TABLE」として、プロシジャから出力される表をそれぞれ格子状に配置させています。