2

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

数据要;
  设置有;
  由 x 未排序;
  如果 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;

y跟踪 的前一个值xu保持计数。当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
于 2013-03-03T08:49:35.593 回答