找到由id更改的num列的计数

时间:2016-08-01 11:33:29

标签: sas

任何人都可以帮助我解决问题。

我有以下虚拟数据:

id  num   
1   1
1   2
1   1
1   2
1   1
1   2
2   1
2   15
2   1 
2   1
2   1
2   15
2   1
2   15

如何计算每个id的num(列)更改次数? 请查找结果和新栏目。 我需要这样的结果

id  number  no_of_times
1   1       1
1   2       1
1   1       1
1   2       2
1   1       1
1   2       3
2   1       1
2   15      1
2   1       1   
2   1       1
2   1       1
2   15      2
2   1       1
2   15      3

希望您在看到结果后能够理解

1 个答案:

答案 0 :(得分:0)

以下哈希方法适用于随问题提供的测试数据:

data have;
input id  number  no_of_times_target;
cards;
1   1       1
1   2       1
1   1       1
1   2       2
1   1       1
1   2       3
2   1       1
2   15      1
2   1       1   
2   1       1
2   1       1
2   15      2
2   1       1
2   15      3
;
run;

data want;
  set have;
  by id;
  if _n_ = 1 then do;
    length prev_number no_of_times 8;
    declare hash h();
    rc = h.definekey('number','prev_number');
    rc = h.definedata('no_of_times');
    rc = h.definedone();
  end;
  prev_number = lag(number);
  if number > prev_number and not(first.id) then do;
    rc = h.find();
    no_of_times = sum(no_of_times,1);
    rc = h.replace();
  end;
  else no_of_times = 1;
  if last.id then rc = h.clear();
  drop rc prev_number;
run;