SAS中使用数组、循环、条件语句获取数据中指定起始位置的校验累计和
Use array, loop, and conditional statement in SAS to get check cumulative sum at a specified starting position in data
我正在进行生存分析,想知道是否有更好的方法来使用数组和循环编写下面的过程。
我希望能够在最后一段代码中指定几周的时间,而不必全部写出来。我正在尝试从变量 week 位置(week 是失败周)开始返回 n周数。变量 w1-w52 是一件设备的状态,所以我想看看一件设备在出现故障之前是否已经 运行 连续几周。
proc phreg data=dataset;
model week*failure(1) = var1 var2 var3 var4 week week_runtime/ ties = efron;
array weeks(*) w1-w52;
/* This is the status of equipment at the week of fail */
equipment_sts = weeks[week];
/* This is where I'm trying to make my code more efficient so I can specify n weeks */
if sum(weeks[week] + weeks[week-1] + weeks[week-2] + weeks[week-3] .... weeks[week - n]) = n then week_runtime = 1;
else week_runtime = 0;
run;
不清楚您要创建的逻辑是什么。听起来你想要一个布尔标志,WEEK_RUNTIME,当 WEEK 没有发生故障时,它是真的。
我不知道 PROC PHREG 内部的编程是否支持 DATA 步的全部功能,但在数据步中,您可以使用带有 WHILE() 子句的迭代 DO 循环,一旦找到失败。
data have ;
input week week1-week5 ;
cards;
2 1 1 1 0 0
3 1 1 0 0 0
4 1 1 1 1 1
;
data want;
set have;
array weeks week1-week5 ;
week_runtime=1;
do index=1 to min(week,dim(weeks)) while (week_runtime=1);
week_runtime=weeks[index];
end;
drop index;
run;
结果:
week_
Obs week week1 week2 week3 week4 week5 runtime
1 2 1 1 1 0 0 1
2 3 1 1 0 0 0 0
3 4 1 1 1 1 1 1
PS 如果您确实将此代码放入 PROC PHREG 中,请当心,因为我认为过程中不支持原始的更简单的 ARRAY 语法。您必须在数组名称和变量列表之间添加多余的 [*]
标记。
我正在进行生存分析,想知道是否有更好的方法来使用数组和循环编写下面的过程。
我希望能够在最后一段代码中指定几周的时间,而不必全部写出来。我正在尝试从变量 week 位置(week 是失败周)开始返回 n周数。变量 w1-w52 是一件设备的状态,所以我想看看一件设备在出现故障之前是否已经 运行 连续几周。
proc phreg data=dataset;
model week*failure(1) = var1 var2 var3 var4 week week_runtime/ ties = efron;
array weeks(*) w1-w52;
/* This is the status of equipment at the week of fail */
equipment_sts = weeks[week];
/* This is where I'm trying to make my code more efficient so I can specify n weeks */
if sum(weeks[week] + weeks[week-1] + weeks[week-2] + weeks[week-3] .... weeks[week - n]) = n then week_runtime = 1;
else week_runtime = 0;
run;
不清楚您要创建的逻辑是什么。听起来你想要一个布尔标志,WEEK_RUNTIME,当 WEEK 没有发生故障时,它是真的。
我不知道 PROC PHREG 内部的编程是否支持 DATA 步的全部功能,但在数据步中,您可以使用带有 WHILE() 子句的迭代 DO 循环,一旦找到失败。
data have ;
input week week1-week5 ;
cards;
2 1 1 1 0 0
3 1 1 0 0 0
4 1 1 1 1 1
;
data want;
set have;
array weeks week1-week5 ;
week_runtime=1;
do index=1 to min(week,dim(weeks)) while (week_runtime=1);
week_runtime=weeks[index];
end;
drop index;
run;
结果:
week_
Obs week week1 week2 week3 week4 week5 runtime
1 2 1 1 1 0 0 1
2 3 1 1 0 0 0 0
3 4 1 1 1 1 1 1
PS 如果您确实将此代码放入 PROC PHREG 中,请当心,因为我认为过程中不支持原始的更简单的 ARRAY 语法。您必须在数组名称和变量列表之间添加多余的 [*]
标记。