我正在努力解决以下问题。我希望为给定的“一”序列创建一个计数器。例如,我有以下内容:
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 时,则将 的值增加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