SAS计数器用于一系列数字

时间:2013-03-03 07:49:57

标签: sas counter

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

2 个答案:

答案 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