SAS データセットの変数、および変数タイプを指定するだけで、いわゆる Table 1 を Excel ファイル形式で (一応) 出力できるマクロです。
SAS データセットと変数、および変数タイプを指定するだけで、単変量と多変量の Cox 回帰の結果をまとめて Excel ファイル形式で (一応) 出力できるマクロです。
2つのマクロを用いると、以下のようなファイルが出力できます。
本マクロは出力エンジンとして ods tagsets.excelxp という方式を使っており、厳密に言えば Excel ファイルではないファイルが生成されます。 そのため、出力したファイルを開こうとすると「ファイル形式と拡張子が一致しません。ファイルが破損しているか、安全ではない可能性があります。・・(以下略)・・。[はい] [いいえ]」と表示されます。 ここで [はい] を選択すると、微妙に Excel 形式ではないファイルを自動で強制変換してくれて Excel ファイルとして普通に開くことができます。 後で参照するときに便利なので、[はい] で開いて強制変換したものを xlsx 形式などで保存しておくとよいでしょう。
既知の問題点 & 改良予定
不具合や質問につきましては、メールにてご連絡いただけると助かります。
ダウンロードファイル中の事例 (stab_example.sas) を見ると概ね使い方がわかると思いますが、簡単に説明を書きます。
マクロは %tableInit(), %tableMake(), %tableOut() という集計結果をデータセット出力するパートと、それをまとめて Excel に吐き出す %outputInit(), %outputMake(), %outputOut() というパートに分かれています。%outputInit(), %outputMake(), %outputOut() は %stab と %stabcox で共通なので、最後にまとめて書いています。
事例では、3つの背景因子集計の表を作成し、一つの Excel ファイルに出力する処理が書かれています。
%let data = test; /* 入力データセット名 */ %let out = out1; /* 出力データセット名 */ %let group = trt; /* 群変数 */ %let pvalue = 1; /* P値の出力 (0: 出力しない, 1: 出力する) */ %let color = 1; /* 色装飾の有無 (0: なし, 1: あり) */ %tableInit(); %tableMake(cont, age, "Age (continuous)", round = 0.1); %tableMake(ordr, age, "Age (ordinal)", round = 0.1); %tableMake(cont, height, "Height (continuous)", round = 0.01); %tableMake(disc, sex, "Sex ― No. (%)"); %tableMake(disc, fhist, "Familial history ― No. (%)"); %tableMake(disc, tfhist, "Familial history ― No. (%)"); %tableMake(disc, hist, "Previous history ― No. (%)"); %tableMake(disc, comp, "Complication ― No. (%)"); %tableMake(disc, comp, "Complication (with missing) ― No. (%)", missing = 1); %tableOut();
表ごとに %let で始まるグローバル変数の設定処理が必要です。 入力データセット名 (data)、出力データセット名 (out)、群変数 (group)、P値の出力の有無 (pvalue)、色装飾の有無 (color)を指定します。 群変数をブランクにしておくと、群なしでデータセット全体の結果を出力します (P値は計算しません)。 色装飾ありにすると、変数毎に白とグレーで縞模様になるように背景色をつける処理をします。
次は、%tableInit() で、その他の表の設定を行います。 設定可能な項目は以下の通りです。
%tableInit( nprint = 1, footer = 1, font = "Times New Roman", fontsize = 3, hlabel = "Characteristic", slabel = "Study population" ); nprint - サンプルサイズ (データ行数) の出力 0: 出力しない 1: 出力する (default) footer - 作成日時の出力 0: 出力しない 1: 出力する (default) font - 出力フォント名 (SASで指定可能なフォント名を入力) "Times New Roman": (default) fontsize - 出力フォントサイズ hlabel - ラベル制御 "Characteristic": (default) slabel - 単群の場合のラベル制御 "Study population": (default)
次は、%tableMake() で、変数毎に設定を行います。 連続変数 (type = cont / ordr) については、数値データが入っている必要があります (平均・標準偏差を集計する cont と、中央値・範囲などを集計する ordr に対応しています)。 離散変数 (type = disc) については、テキストデータでも、コーディングしてフォーマットがあたったデータでも、どちらでもきれいに集計表にできます。 項目は以下の通りです。
%tableMake( type, var, label, round = 0.1, exact = 1, missing = 0, weight = 0 ); type - 変数の型を指定 cont: 連続変数 (平均と標準偏差を集計, Welch型のt検定 or ANOVAを使用) ordr: 順序変数 (中央値と範囲を集計, Wilcoxon検定 or Kruskal-Wallis検定を使用) disc: 離散変数 (頻度と割合を集計, 検定は後述) var - 解析する変数を指定 label - 表示ラベルを指定 round - 連続変数または順序変数の数値丸めのオプション exact - 離散変数の検定について 0: 期待セル度数が5未満のセルがある場合にFisher's exact test そうでない場合にカイ二乗検定を使用 1: Fisher's exact testを使用 (default) missing - 離散変数の集計において欠測を表示するか否か 0: 表示しない (default) 1: 表示する weight - 重み変数 (通常は使用しない)
変数がたくさんある場合は、続けて %tableMake() を複数行に渡って書きます。
最後は %tableOut() で終わります。引数は特にありません。
%tableOut(); ※引数はありません。
こちらもダウンロードファイル中の事例 (stab_example.sas) を見ると概ね使い方がわかると思いますが、簡単に説明を書きます。
また同様に、マクロは %phregInit(), %phregMake(), %phregOut() という集計結果をデータセット出力するパートと、それをまとめて Excel に吐き出す %outputInit(), %outputMake(), %outputOut() というパートに分かれています。
事例では、2つの説明変数 (離散型と連続型) があるデータについて単変量と多変量の Cox 回帰モデルを当てはめた結果の表を作成し、Excel ファイルに出力する処理が書かれています。
%let data = testcox; /* 入力データセット名 */ %let out = out4; /* 出力データセット名 */ %let time = time; /* 時間変数 */ %let event = event; /* イベント変数 */ %let censorvalue = 0; /* 打ち切り値 */ %let color = 1; /* 色装飾の有無 (0: なし, 1: あり) */ %phregInit(); %phregMake(group, "Treatment"); %phregMake(marker, "Biomarker", aclass = 0); %phregOut();
基本的に %stab() と同様ですが。 入力データセット名 (data)、出力データセット名 (out)、時間変数 (time)、イベント変数 (event)、打ち切りの値 (censorvalue)、色装飾の有無 (color)を指定します。 色装飾ありにすると、変数毎に白とグレーで縞模様になるように背景色をつける処理をします。
次は、%phregInit() と書きますが、マクロの構造上の問題で %tableInit() のような設定項目がありません。 その他の表の設定は一番最後の %phregOut() で指定できます。
%phregInit(); ※引数はありません。
次は、%phregMake() で、変数毎の設定を行います。 変数名とラベルを指定し、aclass で離散 (class) 変数かどうかを設定できます。 項目は以下の通りです。
%phregMake( avar, label, aclass = 1 ); avar - 解析する変数を指定 label - 表示ラベルを指定 aclass - class 変数かどうかを指定 0: 連続変数 1: 離散 (class) 変数 (default)
変数がたくさんある場合は、続けて %phregMake() を複数行に渡って書きます。
最後は %tableOut() で終わります。 一部の解析手法に関する設定と、その他の表の設定が指定できます。
%phregOut( firth = 0, eventcode = 0, nprint = 1, footer = 1, font = "Times New Roman", fontsize = 3 ); firth - Firth のバイアス補正法を使用するかどうか 0: 使用しない (default) 1: 使用する eventcode - 競合リスクイベントのコード 0: 競合リスクなし (default) 0以外: 指定したコードを競合リスクイベントとして解析 nprint - サンプルサイズ (データ行数) の出力 0: 出力しない 1: 出力する (default) footer - 作成日時の出力 0: 出力しない 1: 出力する (default) font - 出力フォント名 (SASで指定可能なフォント名を入力) "Times New Roman": (default) fontsize - 出力フォントサイズ
こちらはあまり設定する項目が無いですが、以下のような形式で %outputInit(), %outputMake(), %outputOut() を使用して生成したデータセットを指定します。 %stab と %stabcox 共通の出力用マクロです。
%outputInit("&Path.stab_example.xls"); %outputMake(out1, "Table1", "Table 1: Patient characteristics"); %outputMake(out2, "Table2", "Table 2: Patient characteristics (no group, no p-value)"); %outputMake(out3, "Table3", "Table 3: Patient characteristics (no p-value, no color)"); %outputMake(out4, "Table4", "Table 4: Univariate and multivariate analyses for OS with Cox regression models", cox = 1); %outputOut();
以下は各マクロの引数説明です。
%outputInit( file ); file - 出力するファイル名 必要に応じてパスから指定します 拡張子は ".xls" を必ず指定すること。
%outputMake( out, sheet, title, abscolwidth="40,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7", cox = 0 ); out - 出力したいデータセット名 %tableInit() & %tableMake() を使用して生成したデータセット sheet - 出力シート名 Excel のシート名の制限に引っかかるものはエラーがでますのでご注意ください title - 表のタイトル 一行目に出力する表タイトルの内容を指定します abscolwidth - Excel 上の列幅をカンマ区切りで指定します (大体はデフォルトのままで大丈夫です) cox - Cox 回帰のテーブル用に abscolwidth を調整するかどうかを指定します 0: 調整しない (default) 1: 調整する (Cox 回帰のときは指定を推奨)
%outputOut(); ※引数はありません。