SAS生存分析聚合数据展开方法 或proc lifetest直接运行方案
SAS聚合生存数据运行PROC LIFETEST的两种实现方案
方案一:无需展开数据直接运行(推荐,性能更高)
不需要将聚合数据拆分为单行单观测格式,直接使用PROC LIFETEST自带的FREQ语句指定变质数量为加权频数即可,计算结果和展开数据完全一致,且避免了生成超大数据集的性能损耗。
示例代码如下:
/* 请将下方的veg_spoil替换为你实际的聚合数据集名称 */ proc lifetest data=veg_spoil method=km plots=survival(atrisk); event = 1; /* 所有观测均为变质事件无删失,统一设置事件标记为1 */ time month * event(0); /* 此处0代表删失值,event恒为1,所有行均按事件计算 */ strata vegetable; /* 按蔬菜分类分层,输出各组生存曲线与组间差异检验结果 */ freq n_spoiled; /* 直接以变质数量作为频数加权,自动完成计数统计 */ run;
方案二:聚合数据转换为未聚合格式
如果业务需要生成单行对应一个样本的未聚合数据集,可通过数据步循环实现,示例代码如下:
/* 生成未聚合数据集 */ data uncollapsed_veg; set veg_spoil; /* 按n_spoiled的数值重复输出当前观测 */ do i = 1 to n_spoiled; output; end; drop i n_spoiled; /* 删掉辅助计数变量 */ run; /* 对未聚合数据集运行生存分析 */ proc lifetest data=uncollapsed_veg method=km plots=survival(atrisk); event = 1; time month * event(0); strata vegetable; run;
注意:如果变质数量数值很大,展开后的数据集行数会大幅增加,运行效率远低于方案一,非必要不建议使用该方案。
内容的提问来源于stack exchange,提问作者Tomikuz
相关产品推荐
相关产品推荐

