▼ N(m, s)の正規分布の曲線をSAS/GRAPHで描くマクロ %normplot は,以下のように使う. %normdata( f, 0, 1, out = xxx ) %normplot( data = xxx , y = f ) %normdataの指定パラメータは順番に (縦軸・確率密度の名前,平均,標準偏差,out = 出力データセット名) である.デフォルトで横軸の変数名が x で作成される. %normplot では proc gplot が作動する. 使用するデータは %normdata で作成されることを前提にしている.パラメータは, (data = 入力データセット名,y = 縦軸の変数名) 上記の例では平均0,標準偏差1の標準正規分布が描かれる. グラフのサイズを変更したい場合は %normplot( data = xxx, y = f , ylength = 9cm, xlength = 12cm ) その他,いくつか体裁を整えるためのオプションもある. 複数の正規変数を同時に描画するには, %normdata( y1, 40, 10, out = a1 ) %normdata( y2, 50, 15, out = a2 ) %normdata( y3, 60, 20, out = a3 ) data aaa ; merge a1 a2 a3 ; by x ; run ; %normplot( data = aaaa, y = y1 - y3 ) この結果,N(40,10) ,N(50,15), N(60,20) の3つの正規曲線が同時に描かれる. ▼ %normplot の内容は以下の通り. %macro normplot( data = , /* 入力データセット名 */ y = , /* 縦軸の変数名 */ x = x , /* 横軸の変数名 */ xlength = 9cm , /* 横軸の長さ */ ylength = 7cm , /* 縦軸の長さ */ w = 1 /* 曲線の太さ */ ) ; axis1 length = &ylength label = none value = ( h = 0.8 f = swiss ) ; axis2 length = &xlength label = none value = ( h = 0.8 f = swiss ) ; legend1 label = none ; symbol1 v = none i = spline c = black w = &w ; symbol2 v = none i = spline c = blue w = &w; symbol3 v = none i = spline c = pink w = &w; symbol4 v = none i = spline c = green w = &w; symbol5 v = none i = spline c = red w = &w; symbol6 v = none i = spline c = bown w = &w; symbol7 v = none i = spline c = syan w = &w; symbol8 v = none i = spline c = puple w = &w; symbol9 v = none i = spline c = orange w = &w; symbol10 v = none i = spline c = gray w = &w; symbol11 v = none i = spline c = yellow w = &w; proc gplot data = &data ; plot ( &y ) * &x / fr overlay legend = legend1 vaxis = axis1 haxis = axis2 ; run ; quit; %mend normplot ; ▼ %normdata の内容は以下の通り. %macro normdata( yvar , mean , std , iter = 100 , xvar = x , out = ) ; data &out ; drop start stop incremen ; start = &mean - &std * 3 ; stop = &mean + &std * 3 ; incremen = ( ( &mean + &std * 3 ) - ( &mean - &std * 3 ) ) / &iter ; do &xvar = start to stop by incremen ; &yvar = %normdist( &xvar , &mean , &std ) ; output ; end ; run ; %mend normdata ; ▼ %normdist が %normdata の中で使用されている.以下の内容である. %macro normdist( x , mean , std ) ; ( 1 / ( &std * sqrt( 2 * 3.1415926535 ) ) ) * exp( -( &x - &mean ) ** 2 / ( 2 * &std * &std )) %mend normdist ;