Kengo Nagashima



English page

Here!

sample SAS scripts generator

kmdata 2.2.2 以降用のサンプル SAS スクリプトの生成を行います。

アプレットの警告が出ますので、問題無い場合は了承の上ご利用ください。
バグがあるかもしれませんので、メールにてご連絡いただけると助かります。

Kaplan-Meier プロットに No. at risk などを追加するマクロ

マクロ kmatrisk を拡張したマクロです。SAS ユーザー総会 2010 で発表しました。
Kaplan-Meier プロットに No. at risk などの表示を追加するマクロです。
打ち切りをヒゲに変更する事も出来るようになっています。
信頼区間、生存関数の差の検定結果や Cox の比例ハザードモデルのハザード比、Median survival time、共変量で調整した生存関数の推定量を出力できるようになりました。
ライセンスは GPLv3 です、再頒布または改変については GPLv3 の詳細を参照してください。
マクロの妥当性については可能な限り確認はしておりますが、いかなる損害が起きても *完全無保証* ですので、各自でプロシージャの結果と付き合わせる等を行い、結果の妥当性を確認する事をお勧めしております。

kmdata_v222.zip (download)

SAS 9.2 上で作成し、一応 SAS 9.1.3 上でもサンプルコードについては動作確認をしています。
ただし、SAS 9.2 と SAS 9.1.3 では SAS/Graph の仕様が異なるため、同じプログラムを使い回すことはできません。出力位置が微妙に異なるので、SAS のバージョン毎に出力位置を調整して下さい。
推奨環境は、Windows XP Professional SP3 32bit, SAS 9.2 32bit, アウトプットのフォントサイズが 12pt です。
加えて、example に示したグラフオプションの併用をお勧めします。以上の設定を行った場合、下記の事例に示したグラフを出力できます。

更新履歴

既知の問題点 & 改良予定

  1. 信頼区間の表示がより見やすくなるように、ODS Graph 形式っぽく改良する予定です。

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

使用方法:sample SAS scripts generator に必要な情報を入力し、スクリプト生成ボタンを押し、出力を SAS で実行の上、微調整を行います。スクリプトの概要としては、include statemenet でマクロを読み込み、%km_data マクロで描画用データセットを生成し、gplot procedure を使ってグラフを描画しています。

マクロ引数

%km_data マクロには以下の引数を指定できます。

/*****************************************************************

  data            : 入力データセット名
  time            : [data] 内の生存時間変数名
  stra            : [data] 内の層の変数名
  censor          : [data] 内の打ち切りの変数名
  censorv         : 変数 [censor] の打ち切りを表わす値
  out             : 出力データセット名
  anno            : 出力する annotate データセット名
  afont           : 付加情報のフォント
  failure         : 0 = 通常の Kaplan-Meier プロット
                    1 = Falure プロット
  adjbase         : 0 = 調整しない
                    1 = baseline statement による調整を行う
  adjbaseData     : 共変量の情報を格納したデータセット名
  covariates      : 調整する共変量の指定
  classCovariates : class statement に指定する共変量
  ci              : 信頼区間の出力 (0: 出力しない, 1: 出力する)
  pattern         : 信頼区間の塗りつぶしパターン
                    SAS help [Annotate Dictionary STYLE Variable] を参照
  censEXT         : 打ち切り記号の拡張 (0: 拡張しない, 1: 拡張する)
  cHeight         : 拡張打ち切り記号の高さ
  cWidth          : 拡張打ち切り記号の太さ
  size            : 付加情報の文字サイズ
  step            : 付加情報の表示間隔.
                    重なってしまう場合は値を変える.
  atrisk          : リスク集合の大きさの出力
                    (0: 出力しない, 1: 出力する)
  atriskorder     : リスク集合の大きさの計算刻み幅
  atriskYsys      : グラフ外にリスク集合の大きさを表示するために使用;
                    SAS help [YSYS variable] を参照
  atriskPos       : グラフ外にリスク集合の大きさを表示するために使用;
                    SAS help [Position variable] を参照
  atriskStep      : リスク集合の大きさの表示間隔.
                    重なってしまう場合は値を変える.
  base            : リスク集合の大きさの縦軸出力位置.
                    0を設定すると横軸に接する.
  label           : リスク集合の大きさの一番上の行に出力されるラベル.
  test            : 生存関数の差の検定の出力
                    (0: 出力しない, 1: 出力する)
  testX           : 生存関数の差の検定の出力位置 (横軸)
                    データエリアのパーセンテージで指定します
                    100が一番右.
  testY           : 生存関数の差の検定の出力位置 (縦軸).
                    データエリアのパーセンテージで指定します.
                    100が一番上.
  type            : 検定の種類 (logrank: log-rank test, wilcoxon:
                    generalized wilxocon test, likelihoodratio:
                    likelihood ratio test)
  hr              : ハザード比の出力 (0: 出力しない, 1: 出力する).
                    対照群には param = ref ref = first を指定します.
  hrX             : 生存関数の差の検定の出力位置 (横軸).
                    データエリアのパーセンテージで指定します.
                    100が一番右.
  hrY             : 生存関数の差の検定の出力位置 (縦軸).
                    データエリアのパーセンテージで指定します.
                    100が一番上.
  mst             : 生存期間中央値と95%信頼区間の出力 (0: 出力しない,
                    1: 出力する)
  mLabX           : 生存期間中央値の層ラベルの出力位置 (横軸).
  mMedX           : 生存期間中央値の出力位置 (横軸).
  mCIX            : 生存期間中央値の95%信頼区間の出力位置 (横軸).
  mstY            : 生存期間中央値の出力位置 (縦軸).

*/
%macro km_data(
  data, time, stra, censor, censorv,
  out = graph, anno = anno,
  afont = "'Times New Roman'",

  failure = 0,

  adjbase = 0, adjbaseData = , covariates = ,
  classCovariates = ,

  ci = 0, pattern = x4,

  censEXT = 0, cHeight = 0.02, cWidth = 5,

  size = 2.5, step = 5,

  atrisk = 0, atriskOrder = , atriskYsys = 1,
  atriskPos = 3, atriskStep = 5, base = 0, label = "No. at risk",

  test = 0, testX = 90, testY = 100, type = logrank,

  hr = 0, hrX = 90, hrY = 95,

  mst = 0, mLabX = 60, mMedX = 80, mCIX = 98, mstY = 95
);

Examples

Default:

kmdata example 01

Special censor symbols:

kmdata example 02

Homogeneity test:

kmdata example 03

Hazard ratios:

kmdata example 04

Median survival:

kmdata example 05

Failuer plot:

kmdata example 06

Confidence interval (dotted line):

kmdata example 07

Confidence interval (meshed):

kmdata example 08

No. at risk on inside:

kmdata example 09

No. at risk on outside:

kmdata example 10

Combination (homogeneity test, confidence interval, and no. at risk on outside):

kmdata example 11

Baseline adjusted plot:

kmdata example 12

Baseline adjusted failure plot:

kmdata example 13

Baseline adjusted plot with confidence interval (dotted line):

kmdata example 14

Baseline adjusted plot with confidence interval (meshed):

kmdata example 15

リスク集合の定義

本マクロの v2.1.3 以上では、リスク集合の大きさを Kalbfleisch and Prentice 2003 の定義 [1] にしたがって実装しました (恐らく LIFETEST Procedure と同じ出力になります)。
具体的には、時間 ti の直前まで (ti は含まない) の生存者数をリスク集合の大きさ ni と定義します。
この定義から、サンプルサイズを n0 とすると、時間 t1 = 0 で打ち切りが 1 例起きていた場合、n1 = n0 になります。
時間 t = 1.9999 ではイベントも打ち切りもなくリスク集合の大きさが 10 だった場合、時間 t2 = 2 でイベントか打ち切りが1例以上起きていたとしても、n2 = 10 になります。
本マクロ v2.1.2 以下ではこの扱いを詳しく規定していませんでした。リスク集合の大きさを表示する時間 (example では時間 0, 2.5, 5, 7.5, 10, 12.5) イベントや打ち切りが起こっていた場合、LIFETEST Procedure と異なる出力になってしまいます、もし古いものをお持ちの方がいたらバージョンアップをお願い致します。

[1] Kalbfleisch JD, Prentice RL. The Statistical Analysis of Failure Time Data, 2nd Edition. John Wiley & Sons, Inc. 2002: p.15.

その他コンテンツ

旧グラフ例や ODS Graph との比較

旧バージョン

kmdata_v221.zip (download)
kmdata_v220.zip (download)
kmdata_v213.zip (download)
kmdata_v212.zip (download)
kmdata_v211.zip (download)
kmdata_v210.zip (download)
kmatrisk_v201.zip (download)
kmatrisk_v200.zip (download)

履歴