SAS:我如何测试一个值在不同时间之间的稳定性
我有这个数据库:SAS:我如何测试一个值在不同时间之间的稳定性,sas,stability,Sas,Stability,我有这个数据库: data temp; input ID monitoring_date score ; datalines; 1 10/11/2006 0 1 10/12/2006 0 1 15/01/2007 1 1 20/01/2007 1 1 20/04/2007 1 2 10/08/2008 0 2 11/09/2008 0 2 17/10/2008 1
data temp;
input ID monitoring_date score ;
datalines;
1 10/11/2006 0
1 10/12/2006 0
1 15/01/2007 1
1 20/01/2007 1
1 20/04/2007 1
2 10/08/2008 0
2 11/09/2008 0
2 17/10/2008 1
2 12/11/2008 0
3 10/12/2008 0
3 10/08/2008 0
3 11/09/2008 0
3 17/10/2009 1
3 12/12/2009 1
3 05/01/2010 0
4 10/12/2006 0
4 10/08/2006 0
4 11/09/2006 0
4 17/10/2007 0
4 12/12/2007 0
4 09/04/2008 1
4 05/08/2008 1
5 10/12/2013 0
5 03/09/2013 0
5 11/09/2013 0
5 19/10/2014 0
5 10/12/2014 1
5 14/01/2015 1
6 10/12/2017 0
6 10/08/2018 0
6 11/09/2018 0
6 17/10/2018 1
6 12/12/2018 1
6 09/04/2019 1
6 25/07/2019 0
6 05/08/2019 1
6 15/09/2019 0
;
我想创建一个新的数据库,其中有一个新的列,我注意到,对于每个ID,分数从0到1的第一次进步的日期,如果这个进步在监测结束前至少3个月是稳定的,那么date_progresion=:
data want;
input ID date_progression;
datalines;
1 15/01/2007
2 .
3 .
4 09/04/2008
5 .
6 .
;
我真的不知道如何编写代码,我想得到想要的数据来生成一个cox模型,其中进展(是/否)是我的事件。
我真的被卡住了
提前感谢您的帮助 道氏循环可以处理
ID
组,跟踪1次活动运行。跑步有开始日期和持续时间
例如:
data want;
do _n_ = 1 by 1 until (last.id);
set have;
by id;
select;
when (pscore = 0 and score = 1) do; state = 1; start = date; dur = 1; end;
when (pscore = 1 and score = 1) do; state = 2; dur + 1; end;
when (pscore = 1 and score = 0) do; state = 3; start = .; dur = .; end;
when (pscore = 0 and score = 0) do; state = 4; end;
otherwise;
end;
pscore = score;
end;
if state = 2 and dur >= 3 then progression_date = start;
keep ID progression_date;
format progression_date yymmdd10.;
run;
DOW循环可以处理
ID
组,跟踪1次活动运行。跑步有开始日期和持续时间
例如:
data want;
do _n_ = 1 by 1 until (last.id);
set have;
by id;
select;
when (pscore = 0 and score = 1) do; state = 1; start = date; dur = 1; end;
when (pscore = 1 and score = 1) do; state = 2; dur + 1; end;
when (pscore = 1 and score = 0) do; state = 3; start = .; dur = .; end;
when (pscore = 0 and score = 0) do; state = 4; end;
otherwise;
end;
pscore = score;
end;
if state = 2 and dur >= 3 then progression_date = start;
keep ID progression_date;
format progression_date yymmdd10.;
run;
你有没有把你贴的密码给我?请运行第一个数据步骤并检查返回的数据。您如何定义稳定性?这是一套硬性规定,还是基于时间的变化?从0到1的可接受进展是什么?为什么
id=4,date=90/04/2008
显示为稳定?只有4
两个月的1
。一个ID可以有多个稳定的“区域”,还是只能在其日期结束时才有?date\u progression
是在ID的最后一天结束的1
s运行的开始日期吗?@Richard ID 4的差异大于3个月:从2008年4月9日到2008年8月5日,其中分数为1,因此我们将分数的第一次更改日期从0保留为1(2008年4月9日)因为患者处于监测结束时,评分没有回落到0。您是否收到您发布的代码?请运行第一个数据步骤并检查返回的数据。您如何定义稳定性?这是一套硬性规定,还是基于时间的变化?从0到1的可接受进展是什么?为什么id=4,date=90/04/2008
显示为稳定?只有4
两个月的1
。一个ID可以有多个稳定的“区域”,还是只能在其日期结束时才有?date\u progression
是在ID的最后一天结束的1
s运行的开始日期吗?@Richard ID 4的差异大于3个月:从2008年4月9日到2008年8月5日,其中分数为1,因此我们将分数的第一次更改日期从0保留为1(2008年4月9日)因为患者已处于监测结束阶段,评分没有降回0。非常感谢@Richard!!这正是我想要的!如果您可以在一个月内获得多个监视器读数,或者间隔较远的读数<3(如ID 4),则您应该使用分配标准来说明日期范围<代码>如果。。。并且开始日期>=90,然后是进度\日期=开始在这种情况下,dur
是观察次数的运行长度。非常感谢@Richard!!这正是我想要的!如果您可以在一个月内获得多个监视器读数,或者间隔较远的读数<3(如ID 4),则您应该使用分配标准来说明日期范围<代码>如果。。。并且开始日期>=90,然后是进度\日期=开始在这种情况下,dur
是观察次数的运行长度。