基于事件天数与结局数据集,用SAS绘制存活人数曲线的最简方法
如何用SAS绘制按天数统计的仍存活人数曲线?
嘿,要搞定这个需求,用SAS的PROC LIFETEST绝对是最简单的方案——它专门为生存分析设计,能自动处理删失数据,直接生成你要的“仍存活人数随天数变化”的曲线,完全不用手动去计算每个时间点的存活数。
先明确下前提:你的数据集里,我们把outcome='death'当作终点事件(也就是不再存活),其他结局(比如cholys、tx end这些)都算作删失——意思是到这个时间点,受试者还活着,只是因为其他原因停止随访了。如果你的“存活”定义不一样,后面调整下标记逻辑就行。
第一步:给数据加个终点事件标记
先生成一个指示变量,告诉SAS哪些是终点事件,哪些是删失:
data pretend_surv; set pretend; /* 把死亡标记为终点事件(1),其他情况都是删失(0) */ event = (outcome = 'death'); run;
第二步:调用PROC LIFETEST生成曲线
一行核心代码就能搞定绘图,还能顺便拿到生存分析的统计量:
proc lifetest data=pretend_surv plots=survival(atrisk); time fup_time * event(0); /* 这里的(0)表示event=0是删失状态 */ title "按天数统计的仍存活人数曲线"; run;
time语句:fup_time是我们的随访天数,* event(0)用来指定删失的编码——告诉SAS,当event=0时,这个时间点的受试者没有发生死亡(仍存活),只是随访结束了。plots=survival(atrisk):这个参数太实用了!它不仅会画出平滑的生存曲线(纵轴是存活概率,横轴是天数),还会在曲线下方标注每个关键时间点的仍存活人数(风险人数),完全匹配你的需求。
小调整:如果存活定义不同怎么办?
比如你想把reop(再次手术)也当作终点,只要修改event变量的定义就行:
event = (outcome in ('death','reop'));
用这个方法的好处就是省事儿——不用自己写循环去统计每个时间点的存活数,SAS会自动帮你处理所有删失情况,输出的曲线质量也很高,不用再额外调图。
内容的提问来源于stack exchange,提问作者Roy Pardee
相关产品推荐
相关产品推荐

