2

私は次のことに苦労しています。与えられた「1」のシーケンスのカウンターを作成したいと思います。たとえば、私は次のようにしています。
1
1
1
1
0
0
1
1
1
0
0
1
1
1
1

1そのシーケンスを考えると、をヒットするまでのシーケンスごとにカウンターが必要0です。これが私が欲しいものです:

1 1
1 1
1 1
1 1
0 .
0 .
1 2
1 2
1 2
0 .
0 .
1 3
1 3
1 3
1 3

4

2 に答える 2

3

dperetinの例のデータを使用して、「notsorted」を使用した代替ソリューション:

データが欲しい;
  セットがあります;
  xnotsortedによって;
  x = 1の場合、実行します;
    first.xの場合はy+1;
    z = y;
  終わり ;
走る ;
于 2013-03-04T10:10:12.000 に答える
2

次のようなものを試してください。

data have;
input x;
datalines;
0
1
0
1
1
1
1
0
0
1
1
1
0
0
1
1
1
1
;
run;

data want(keep= x z);
set have;
retain y;
retain u;

if _N_ eq 1 then do; 
    y = x;
    u = 1;
end;

if x eq 1 then z = u;
else if x eq 0 and x ne y then u = u + 1;
y = x;
run;

yxの前の値を追跡しu、カウントを保持します。1にx等しい場合uは、に格納されzます。が0にx等しく、の前の値がx0でなかった場合は、の値を1増やしますu

結果:

x    z
------
0    .
1    1
0    .
1    2
1    2
1    2
1    2
0    .
0    .
1    3
1    3
1    3
0    .
0    .
1    4
1    4
1    4
1    4
于 2013-03-03T08:49:35.593 に答える