取代sas中的观察结果

时间:2012-09-27 14:38:09

标签: sas

我想将“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)。 你能帮帮我怎么做吗?

感谢。

罗兰

1 个答案:

答案 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;