我想将“ondays”变量中的一些观察结果分配给新值,这些值依赖于变量“failure”是0还是1.这里我的数据集
ID X ONDAYS FAILURE
1 0 59 1
2 0 514 1
3 0 313 0
4 0 631 1
5 0 107 1
6 0 71 0
7 0 583 1
8 0 91 1
9 0 66 1
10 0 95 0
我的目标是对ONDAYS进行排序---从最低到最高(我可以这样做)---在ONDAYS中订购值,然后创建一个名为“NEWDAYS”的新变量,它与ONDAYS中的值相同如果FAILURE = 1,但如果FAILURE = 0,NEWDAYS将等于最接近(较低的值),对应于ONDAYS中的FAILURE = 1值。 例如,在NEWDAYS中,观察1将等于59,但是观察6将等于66(因为最接近的有序“失败= 1”值到71是66)。 你能帮帮我怎么做吗?
感谢。
罗兰
答案 0 :(得分:2)
喜欢这个吗?
data have;
input ID X ONDAYS FAILURE;
datalines;
1 0 59 1
2 0 514 1
3 0 313 0
4 0 631 1
5 0 107 1
6 0 71 0
7 0 583 1
8 0 91 1
9 0 66 1
10 0 95 0
;;;;
run;
proc sort data=have;
by ondays;
run;
data want;
set have;
by ondays;
retain prev_ondays;
if failure=0 then new_ondays=prev_ondays;
else new_ondays=ondays;
output;
prev_ondays=new_ondays;
run;
只需跟踪之前的ONDAYS并在需要时将其分配给新的ONDAYS。
另一种选择:SQL。这会更新当前表,这可能是期望的,也可能不是;如果没有,请创建一个新表并应用它。
proc sql undopolicy=none;
update have H set ondays=(select max(ondays) from have V where H.ondays ge V.ondays and V.failure=1)
where failure=0;
quit;