我正在努力解决以下问题。我希望为给定的“一个”序列创建一个计数器。例如,我有以下内容:
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
答案 0 :(得分:3)
使用dperetin示例中的数据,使用'notsorted'的替代解决方案:
data want ; set have ; by x notsorted ; if x = 1 then do ; if first.x then y + 1 ; z = y ; end ; run ;
答案 1 :(得分: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;
y
跟踪x
之前的值,u
保持计数。当x
等于1时,u
会存储在z
中。当x
等于0且前一个x
值不为0时,请将u
的值增加1.
结果:
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