設定法(マクロ初心者の方は読んで下さい)  マクロを利用可能にする方法は2つあります。 (1) colist.sas をプログラム画面に include して submit して参照可 能にする (2) マクロの自動実行機能で指定したディレクトリに colist.sas をコ ピーしておく(マクロ自動実行機能についてはマニュアル参照) 使用法  %colist は proc corr で作った相関行列をシンプルに整形するものです。 最初に proc corr で出力データセットを作成して下さい。例えば、 proc corr data = iris out = corrout noprint ;  %colist はデータセット corrout を入力データセットとして使います。上 記を実行した直後にマクロをパラメータ無しで呼び出すと、 %colist()  この結果は、_colist_ というデータセットが作成されるだけで、何も表示 されません。内容を proc print で見ると、 OBS _NAME_ _1 _2 _3 _4 _LABEL_ 1 SEPALLEN 1 . . . Sepal Length (mm.) 2 SEPALWID -.12 1 . . Sepal Width (mm.) 3 PETALLEN .87 -.43 1 . Petal Length (mm.) 4 PETALWID .82 -.37 .96 1 Petal Width (mm.)  パラメータ無指定の場合の入力デフォルトはSASの一般規則と同じく「最 後に作られたデータセット」を対象にします。出力データセット名のデフォル トは _colist_ ですが、明示しないと気持ち悪い人は、 %colist( data = corrout, out = corrlist ) proc print data = corrlist ; run ; と書くことができます。  出力先はデータセットだけでなく、外部ファイルや log, print などの標準 出力にすることもでします。file= でファイル参照名を指定します。外部ファ イルは filename ステートメントで事前に指定してある参照名を指定します。 例えば、log に出力するには、 %colist( data = corrout, file = log ) SEPALLEN 1 . . . Sepal Length (mm.) SEPALWID -.12 1 . . Sepal Width (mm.) PETALLEN .87 -.43 1 . Petal Length (mm.) PETALWID .82 -.37 .96 1 Petal Width (mm.)  別のプログラムの入力に使う場合は、label が邪魔になります。また SAS 以外のソフトウエアでは変数名も邪魔になることがありますから、これらを抑 止するには、label= や var= に yes 以外の値を指定します。 %colist( data= corrout, file = log, label = no, var = no ) 1 . . . -.12 1 . . .87 -.43 1 . .82 -.37 .96 1 となります。分析用にもっと桁数を増やしたいという時には、maxdec= で、 %colist( data= corrout, file = log, label = no, var = no, maxdec = 4 ) 1 . . . -.1176 1 . . .8718 -.4284 1 . .8179 -.3661 .9629 1 とします。上三角はSASの場合はピリオドですが、一般には空白の場合が多 いようです。レポート用にはマイナス記号にする人もいます。上三角の文字を 空白にしたり、マイナスにしたければ、trianchr= で表示文字を指定し、 %colist( data= corrout, file = log, label = no, var = no, maxdec = 4, trianchr = ) 1 -.1176 1 .8718 -.4284 1 .8179 -.3661 .9629 1 %colist( data= corrout, file = log, label = no, var = no, maxdec = 4, trianchr = - ) 1 - - - -.1176 1 - - .8718 -.4284 1 - .8179 -.3661 .9629 1  好みの問題ですが、「.9629」は嫌いで「0.9629」と整数1の位に0を表示 したければ、intchr=0 とします。 %colist( data= corrout, file = log, label = no, var = no, maxdec = 4, intchr = 0 ) 1 . . . -0.1176 1 . . 0.8718 -0.4284 1 . 0.8179 -0.3661 0.9629 1  また対角要素が整数「1」で表示するのは気に入らないので、下三角の小数 点以下までの桁数と合わせて表示たいという場合は、diagchr = で文字列をそ のまま指定します。 %colist( data= corrout, file = log, label = no, var = no, maxdec = 4, intchr = 0, diagchr = 1.0000 ) 1.0000 . . . -0.1176 1.0000 . . 0.8718 -0.4284 1.0000 . 0.8179 -0.3661 0.9629 1.0000  以上の例では変数が4個だけですが、実際には数十個以上のこともあります。 外部ファイルに出力する場合に、桁数を増やしていると1行の長さを増やす必 要が生じることがあります。そこで lrecl= パラメータが用意してあります。  最後に、このマクロはやはり変数の個数が多い時に便利できれいです。 ----------------------------------------------------------------------------- 1 .80 1 .39 .54 1 .63 .38 .53 1 .62 .66 .49 .42 1 .82 .76 .47 .63 .72 1 .80 .67 .54 .78 .60 .71 1 .56 .38 .58 .89 .44 .66 .62 1 .60 .87 .53 .21 .68 .63 .46 .24 1 .84 .78 .54 .59 .84 .87 .72 .58 .72 1 .44 .71 .85 .41 .62 .53 .56 .43 .74 .63 1 .42 .10 .25 .76 .14 .34 .49 .73 -.09 .28 .06 1 .41 .52 .32 .08 .56 .35 .41 -.01 .54 .52 .48 -.05 1 ----------------------------------------------------------------------------- 【履歴】 V1.0 1997.04.12 .... 初公開 V1.1 1997.04.16 .... オプションの追加・変更 (1)下三角表示だけでなく、上三角表示もできるオプションを追加した。 triang = lower を指定すると下三角表示になる triang = upper を指定すると上三角表示になる 上記2種類以外の値を指定すると、違う動作をする。例えば、 triang = 0 を指定すると対称行列のままになる。 triang = 1 を指定すると全要素が &trianchr で指定した文字表示になる。 上記の 0, 1 は評価結果の真偽を意味するので、未定義の変数名を指定すると、 欠損値が返り偽評価されて、対称行列のままになる。 (2)このオプション追加にともない、upperchr= を trianchr= に名称変更した。 %colist( data = x, file = log ) SEPALLEN 1 . . . Sepal Length (mm.) SEPALWID -.12 1 . . Sepal Width (mm.) PETALLEN .87 -.43 1 . Petal Length (mm.) PETALWID .82 -.37 .96 1 Petal Width (mm.) %colist( triang = upper, data = x, file = log ) SEPALLEN 1 -.12 .87 .82 Sepal Length (mm.) SEPALWID . 1 -.43 -.37 Sepal Width (mm.) PETALLEN . . 1 .96 Petal Length (mm.) PETALWID . . . 1 Petal Width (mm.) 【指定できるオプション・パラメータ】 %macro colist ( data = _last_, /* 入力(proc corr の出力)データセット名 */ out = _colist_, /* 相関行列リストの出力データセット名 */ file = , /* 相関行列リストの外部出力ファイル参照名 */ lrecl = , /* 外部ファイル出力時のレコード長 */ label = yes, /* 外部ファイル出力時のラベル出力の有無 */ var = yes, /* 外部ファイル出力時の変数名出力の有無 */ maxdec = 2, /* 相関係数の小数点以下の最大桁数 */ intchr = , /* 整数部1位の表示( 0 または空白など) */ diagchr = 1, /* 対角要素の表示法(文字列そのもの指定) */ triang = lower, /* 下三角表示 lower か上三角表示 upper か */ trianchr = . /* 対三角の表示文字( . または空白など) */ ) ;