我正在努力解决以下问题。我希望为给定的“一”序列创建一个计数器。例如,我有以下内容:
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
使用 dperetin 示例中的数据,使用 'notsorted' 的替代解决方案:
数据要;
设置有;
由 x 未排序;
如果 x = 1 则执行;
如果 first.x 然后 y + 1 ;
z = y ;
结尾 ;
跑 ;
尝试这样的事情:
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 时,则将 的值增加u1。
结果:
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