%stab 4.0.1 + %stabcox 2.0.0

%stab 4.0.1: 背景因子の集計を Excel 出力する SAS マクロ

SAS データセットの変数、および変数タイプを指定するだけで、いわゆる Table 1 を Excel ファイル形式で (一応) 出力できるマクロです。

%stabcox 2.0.0: Cox 回帰による単変量・多変量解析の結果を Excel 出力する SAS マクロ

SAS データセットと変数、および変数タイプを指定するだけで、単変量と多変量の Cox 回帰の結果をまとめて Excel ファイル形式で (一応) 出力できるマクロです。

2つのマクロを用いると、以下のようなファイルが出力できます。

本マクロは出力エンジンとして ods tagsets.excelxp という方式を使っており、厳密に言えば Excel ファイルではないファイルが生成されます。 そのため、出力したファイルを開こうとすると「ファイル形式と拡張子が一致しません。ファイルが破損しているか、安全ではない可能性があります。・・(以下略)・・。[はい] [いいえ]」と表示されます。 ここで [はい] を選択すると、微妙に Excel 形式ではないファイルを自動で強制変換してくれて Excel ファイルとして普通に開くことができます。 後で参照するときに便利なので、[はい] で開いて強制変換したものを xlsx 形式などで保存しておくとよいでしょう。

stab1

  • stab_v401.zip (download; %stab 4.0.1 と %stabcox 2.0.0 が両方入っています)

既知の問題点 & 改良予定

  1. おそらく未知のバグがあると思われます。発見した方はお手数ですが、メールいただけると幸いです。

不具合や質問につきましては、メールにてご連絡いただけると助かります。

マクロの概説 (%stab)

ダウンロードファイル中の事例 (stab_example.sas) を見ると概ね使い方がわかると思いますが、簡単に説明を書きます。
マクロは %tableInit(), %tableMake(), %tableOut() という集計結果をデータセット出力するパートと、それをまとめて Excel に吐き出す %outputInit(), %outputMake(), %outputOut() というパートに分かれています。%outputInit(), %outputMake(), %outputOut() は %stab と %stabcox で共通なので、最後にまとめて書いています。
事例では、3つの背景因子集計の表を作成し、一つの Excel ファイルに出力する処理が書かれています。

%tableInit(), %tableMake(), %tableOut()


  %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値は計算しません)。 色装飾ありにすると、変数毎に白とグレーで縞模様になるように背景色をつける処理をします。

stab2

次は、%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();

  ※引数はありません。
  

マクロの概説 (%stabcox)

こちらもダウンロードファイル中の事例 (stab_example.sas) を見ると概ね使い方がわかると思いますが、簡単に説明を書きます。
また同様に、マクロは %phregInit(), %phregMake(), %phregOut() という集計結果をデータセット出力するパートと、それをまとめて Excel に吐き出す %outputInit(), %outputMake(), %outputOut() というパートに分かれています。
事例では、2つの説明変数 (離散型と連続型) があるデータについて単変量と多変量の Cox 回帰モデルを当てはめた結果の表を作成し、Excel ファイルに出力する処理が書かれています。

%phregInit(), %phregMake(), %phregOut()


  %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 - 出力フォントサイズ
  

マクロの概説 (%stab と %stabcox 共通)

%outputInit(), %outputMake(), %outputOut()

こちらはあまり設定する項目が無いですが、以下のような形式で %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();

  ※引数はありません。
  

バージョン履歴

履歴

  • 2019/03/19 %stab 4.0.1, %stabcox 2.0.0 公開
  • 2018/12/03 %stab 4.0.0 公開