2

変数 "failure" が 0 か 1 かによって決まる新しい値の下にある "ondays" 変数のいくつかの観測値に割り当てたいと思います。ここに私のデータ セットがあります。

    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 の値を並べ替えてから、FAILURE= の場合に ONDAYS と同じ値を持つ "NEWDAYS" という新しい変数を作成します。 1、ただし FAILURE=0 の場合、NEWDAYS は、ONDAYS の FAILURE=1 値に対応する最も近い (より小さい値) に等しくなります。たとえば、NEWDAYS では、観測 1 は 59 に等しくなりますが、観測 6 は 66 に等しくなります (71 に最も近い順序の "failure=1" 値は 66 であるため)。これを行う方法を教えてください。

ありがとう。

ローランド

4

1 に答える 1

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;
于 2012-09-27T14:52:55.990 に答える