楼主: edragon1983
1178 8

[有偿编程] 生存曲线求助 [推广有奖]

  • 0关注
  • 0粉丝

讲师

15%

还不是VIP/贵宾

-

威望
0
论坛币
5143 个
通用积分
7.8889
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
7801 点
帖子
217
精华
0
在线时间
417 小时
注册时间
2007-8-29
最后登录
2024-4-11

200论坛币
数据见附件,想 作图20210812.xlsx (11.09 KB) 绘制成类似如下曲线 生存曲线图.jpg

最佳答案

whymath 查看完整内容

已经改进。
沙发
whymath 发表于 2021-8-13 00:20:42 |只看作者 |坛友微信交流群
edragon1983 发表于 2021-8-14 17:52
谢谢大侠! 还差最后一个关键环节。number censored如何绘制,恳请出手相助!
其他环节通过r与stata也基 ...
已经改进。
  1. /*0. 环境设置*/
  2. option missing = ' ';
  3. filename RawData "D:\作图20210812.xlsx ";

  4. /*1. 导入数据*/
  5. proc import datafile = RawData dbms = excel out = RawData replace;
  6. run;

  7. /*2. 执行生存分析*/
  8. /*2.1 计算各时点的生存率,并执行log-rank检验*/
  9. ods output ProductLimitEstimates = ProductLimitEstimates SurvivalPlot = SurvivalPlot HomTests = HomTests;
  10. proc lifetest data = RawData plots=(survival(atrisk=0 to 135 by 15));
  11.   strata group;
  12.   time time*_COL1(1);
  13. run;
  14. ods output close;

  15. data SurvivalPlot;
  16.   set SurvivalPlot;

  17.   /*获取删失数量*/
  18.   do i = 1 to rec;
  19.     set ProductLimitEstimates(keep=STRATUM time Censor rename=(STRATUM=TmpSTRATUM time=Tmptime))nobs=rec point=i;
  20.     if StratumNum=TmpSTRATUM and time>=Tmptime then CountCensor = sum(CountCensor,Censor);
  21.   end;
  22.   if mod(time,15) = 0 then NumRiskAndCensor = cats(AtRisk,'(',CountCensor,')');
  23.   if Survival then Survival = Survival * 100;
  24.   if Censored then Censored = Censored * 100;
  25. run;

  26. data _null_;
  27.   set HomTests;
  28.   if Test = '对数秩' then call symputx('LogRank',cats(put(ProbChiSq,PValue6.3)));
  29. run;

  30. /*2.2 计算HR*/
  31. ods output HazardRatios = HazardRatios;
  32. proc phreg data = RawData;
  33.   model time*_COL1(1) = group;
  34.   hazardratio group;
  35. run;
  36. ods output close;

  37. data _null_;
  38.   set HazardRatios;
  39.   call symputx('HR',cats(put(HazardRatio,8.2)));
  40.   call symputx('CI',catx('-',put(WaldLower,8.2),put(WaldUpper,8.2)));
  41. run;

  42. /*3. 对计算结果进行绘图呈现*/
  43. proc sgplot data = SurvivalPlot noborder nowall;
  44.   styleattrs datacontrastcolors = (cx5b86c3 cxc7533b);
  45.   step x = time y = Survival /group = StratumNum name = 'step';
  46.   scatter x = time y = Censored /markerattrs = (symbol = plus);
  47.   xaxistable NumRiskAndCensor /class = StratumNum colorgroup = StratumNum
  48.     title = "Number at risk(Number censored)" titleattrs = (weight = bold);

  49.   xaxis values=(0 to 135 by 15) display = (nolabel);
  50.   yaxis values=(0 to 100 by 10);

  51.   keylegend 'step' 'stat' /position = topright location = inside across = 1 noborder;
  52.   inset "(*ESC*){unicode '0020'x}" "(*ESC*){unicode '0020'x}"
  53.     "HR &HR. (95% CI &CI.), log rank P=&LogRank" /position = topright;
  54.   label Survival = 'Disease free survival(%)';
  55. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 50 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 50  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

藤椅
popodan 在职认证  发表于 2021-8-13 22:08:26 |只看作者 |坛友微信交流群
Kaplan Meier plot

proc lifetest data=Graph20210812 plots=survival(strata=individual);
time time * censor(0);
strata Group;
run;



Plot.jpg (31.25 KB)

Plot.jpg

已有 1 人评分论坛币 收起 理由
admin_kefu + 30 精彩帖子

总评分: 论坛币 + 30   查看全部评分

使用道具

板凳
whymath 发表于 2021-8-13 23:53:23 |只看作者 |坛友微信交流群
完成! SGPlot28.png
  1. /*0. 环境设置*/
  2. option missing = ' ';
  3. filename RawData "D:\作图20210812.xlsx ";

  4. /*1. 导入数据*/
  5. proc import datafile = RawData dbms = excel out = RawData replace;
  6. run;

  7. /*2. 执行生存分析*/
  8. /*2.1 计算各时点的生存率,并执行log-rank检验*/
  9. ods output SurvivalPlot = SurvivalPlot HomTests = HomTests;
  10. proc lifetest data = RawData plots=(survival(atrisk=0 to 135 by 15));
  11.   strata group;
  12.   time time*_COL1(1);
  13. run;
  14. ods output close;

  15. data SurvivalPlot;
  16.   set SurvivalPlot;

  17.   if mod(time,15) then AtRisk = .;
  18.   if Survival then Survival = Survival * 100;
  19.   if Censored then Censored = Censored * 100;
  20. run;

  21. data _null_;
  22.   set HomTests;
  23.   if Test = '对数秩' then call symputx('LogRank',cats(put(ProbChiSq,PValue6.3)));
  24. run;

  25. /*2.2 计算HR*/
  26. ods output HazardRatios = HazardRatios;
  27. proc phreg data = RawData;
  28.   model time*_COL1(1) = group;
  29.   hazardratio group;
  30. run;
  31. ods output close;

  32. data _null_;
  33.   set HazardRatios;
  34.   call symputx('HR',cats(put(HazardRatio,8.2)));
  35.   call symputx('CI',catx('-',put(WaldLower,8.2),put(WaldUpper,8.2)));
  36. run;

  37. /*3. 对计算结果进行绘图呈现*/
  38. proc sgplot data = SurvivalPlot noborder nowall;
  39.   step x = time y = Survival /group = StratumNum name = 'step';
  40.   scatter x = time y = Censored /markerattrs = (symbol = plus);
  41.   xaxistable AtRisk /class = StratumNum colorgroup = StratumNum
  42.     title = 'Number at risk' titleattrs = (weight = bold);

  43.   xaxis values=(0 to 135 by 15) display = (nolabel);
  44.   yaxis values=(0 to 100 by 10);

  45.   keylegend 'step' 'stat' /position = topright location = inside across = 1 noborder;
  46.   inset "(*ESC*){unicode '0020'x}" "(*ESC*){unicode '0020'x}"
  47.     "HR &HR. (95% CI &CI.), log rank P=&LogRank" /position = topright;
  48.   label Survival = 'Disease free survival(%)';
  49. run;
复制代码


SASUSER

使用道具

报纸
edragon1983 发表于 2021-8-14 17:52:34 |只看作者 |坛友微信交流群
whymath 发表于 2021-8-13 23:53
完成!
谢谢大侠! 还差最后一个关键环节。number censored如何绘制,恳请出手相助!
其他环节通过r与stata也基本能实现,就卡在number censored的绘制了。多谢多谢!

使用道具

地板
edragon1983 发表于 2021-8-14 21:49:46 |只看作者 |坛友微信交流群
whymath 发表于 2021-8-13 23:53
完成!
再请教一个问题:
ods output SurvivalPlot = SurvivalPlot HomTests = HomTests;
当中 SurvivalPlot = SurvivalPlot无法实现,proc lifetest结果里没有看到SurvivalPlot。需要在什么方面注意呢

使用道具

7
edragon1983 发表于 2021-8-14 22:15:04 |只看作者 |坛友微信交流群
ods output SurvivalPlot无法输出数据集

使用道具

8
whymath 发表于 2021-8-16 23:03:45 |只看作者 |坛友微信交流群
edragon1983 发表于 2021-8-14 21:49
再请教一个问题:
ods output SurvivalPlot = SurvivalPlot HomTests = HomTests;
当中 SurvivalPlot = ...
这是本应有的结果,却未给出。应该观察程序日志,不要放过任何提示信息。

使用道具

9
edragon1983 发表于 2021-8-17 10:13:23 |只看作者 |坛友微信交流群
谢谢大侠出手相助!多谢多谢!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-9 15:20