「MACRO」の編集履歴(バックアップ)一覧はこちら
「MACRO」(2008/10/12 (日) 21:01:23) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
・SASマクロ機能の目的
・プログラムコーディングの簡略化
・プログラムのサブルーチン化
・プログラムの条件つき生成や反復生成
・DATAステップの実行結果に基づく実効制御
&u(){マクロ変数}・・・SASプログラムで使用する値をプログラム実行時に任意の値に変換する。
事前にマクロ変数を定義し、値を設定しておく。
※マクロ変数は大文字と小文字を区別する。
&マクロ変数名;でマクロ変数に定義した値を確認できる。
%LETステートメント…マクロ変数に値を設定する。
初めて出会ったセミコロンで終了。
構文
#highlight(sas){
%let マクロ変数名=任意のテキスト ;}
※マクロ変数をネスト(入れ子)させ、定義することができる。
例) %let opt1=symbolgen ;
%let opt2=mprint ;
%let optall = options &opt1 &opt2 ;
&optall;
&u(){マクロ}・・・プログラムテキストに名前を付けて登録したもの。
プログラム全体、またはプログラムの一部(ステートメント部分)を登録するとこも可能。
SASプログラム中で利用するためには、そのマクロを定義し、値を設定しておく。
マクロを定義するには、%MACRO、%MENDステートメントを使用する。
定義したマクロを呼び出して実行するときはマクロ名に%をつけて実行する。
構文
#highlight(sas){
%MACRO マクロ名[(パラメータリスト)] ;
ステートメント
%MEND [マクロ名] ;
%マクロ名[(パラメータリスト)] ;
}
※マクロとして定義したSASプログラムの中で変化する部分を、マクロ変数を利用して置き換えることで、
プログラムを再利用することができる。(サブルーチン化)
#highlight(sas){
/*マクロを使用したデータのプリント*/
/*------------------------------------------------------------*/
/* 例題:3クラス(a,b,c)のデータをクラス別に */
/* タイトルをつけて表示する。 */
/*-------------------------------------------------------- ---*/
/*テストデータ*/
data test;
infile cards dsd dlm=" ";
length group $10 name $10 ;
input group $ name $ height weight;
cards;
a red 147.5 46.1
a blue 150.3 46.7
a brown 182.2 61.3
a green 165.0 55.4
b pink 178.9 66.5
b black 180.4 70.0
b yellow 152.0 58.4
c white 161.3 54.8
c gray 174.5 63.7
;
run;
/*マクロ定義*/
%macro print ;
data p_test ;
set test ;
if &cond ;
run ;
%title " Class table : &cond " ;
proc print data = p_test ;
run ;
%mend print ;
/*実行*/
%let cond = group eq a ;
%print ;
%let cond = group eq b ;
%print ;
%let cond = group eq c ;
%print ;
/*実行結果の違い*/
%let cond = group eq a ;
%let cond = group eq b ;
%let cond = group eq c ;
%print ;
}
上記のプログラムロジックでは最後に定義されたCクラスしか実行されない。
※マクロ変数名が同じ為、上書きされる。
・SASマクロ機能の目的
・プログラムコーディングの簡略化
・プログラムのサブルーチン化
・プログラムの条件つき生成や反復生成
・DATAステップの実行結果に基づく実効制御
&u(){マクロ変数}・・・SASプログラムで使用する値をプログラム実行時に任意の値に変換する。
事前にマクロ変数を定義し、値を設定しておく。
※マクロ変数は大文字と小文字を区別する。
&マクロ変数名;でマクロ変数に定義した値を確認できる。
%LETステートメント…マクロ変数に値を設定する。
初めて出会ったセミコロンで終了。
構文
#highlight(sas){
%let マクロ変数名=任意のテキスト ;}
※マクロ変数をネスト(入れ子)させ、定義することができる。
例) %let opt1=symbolgen ;
%let opt2=mprint ;
%let optall = options &opt1 &opt2 ;
&optall;
&u(){マクロ}・・・プログラムテキストに名前を付けて登録したもの。
プログラム全体、またはプログラムの一部(ステートメント部分)を登録するとこも可能。
SASプログラム中で利用するためには、そのマクロを定義し、値を設定しておく。
マクロを定義するには、%MACRO、%MENDステートメントを使用する。
定義したマクロを呼び出して実行するときはマクロ名に%をつけて実行する。
構文
#highlight(sas){
%MACRO マクロ名[(パラメータリスト)] ;
ステートメント
%MEND [マクロ名] ;
%マクロ名[(パラメータリスト)] ;}
※マクロとして定義したSASプログラムの中で変化する部分を、マクロ変数を利用して置き換えることで、
プログラムを再利用することができる。(サブルーチン化)
#highlight(sas){
/*マクロを使用したデータのプリント*/
/*------------------------------------------------------------*/
/* 例題:3クラス(a,b,c)のデータをクラス別に */
/* タイトルをつけて表示する。 */
/*-------------------------------------------------------- ---*/
/*テストデータ*/
data test;
infile cards dsd dlm=" ";
length group $10 name $10 ;
input group $ name $ height weight;
cards;
a red 147.5 46.1
a blue 150.3 46.7
a brown 182.2 61.3
a green 165.0 55.4
b pink 178.9 66.5
b black 180.4 70.0
b yellow 152.0 58.4
c white 161.3 54.8
c gray 174.5 63.7
;
run;
/*マクロ定義*/
%macro print ;
data p_test ;
set test ;
if &cond ;
run ;
%title " Class table : &cond " ;
proc print data = p_test ;
run ;
%mend print ;
/*実行*/
%let cond = group eq a ;
%print ;
%let cond = group eq b ;
%print ;
%let cond = group eq c ;
%print ;
/*実行結果の違い*/
%let cond = group eq a ;
%let cond = group eq b ;
%let cond = group eq c ;
%print ;}
上記のプログラムロジックでは最後に定義されたCクラスしか実行されない。
※マクロ変数名が同じ為、上書きされる。
#hr(height=1,color=#002bb8)