保留SAS人员最近5次的访问

时间:2019-07-16 16:42:14

标签: arrays loops sas

我有以下内容,其中包含日期,访问次数和感兴趣的特定变量。我想保留SAS可以按人提供的最近五次访问。我熟悉保留第一次和最后一次访问。下面列出了一个主题的数据:

Person        Date           VisitNumber           VariableOfInterest
001          10/10/2001                1                           6
001          11/12/2001                3                           8
001          01/05/2002                5                           12
001          03/10/2002                6                           5
001          05/03/2002                8                           3
001          07/29/2002               10                           11

任何见识将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果您按VisitNumber降序进行排序会更容易,这样问题就可以解决一个人的前5个观察值。然后只需生成一个计数器,即可观察到该观察值是针对该人及其子集的。

data want;
  set have ;
  by person descending visitnumber;
  if first.person then rowno=0;
  rowno+1;
  if rowno <= 5;
run;   

答案 1 :(得分:2)

双DOW循环将使您在第一个循环中测量组,并在第二个循环中根据所需的每组标准从组中进行选择。当have很大且已预先排序,并且要避免其他排序时,此功能很有用。

data want;
  * measure the group size;
  do _n_ = 1 by 1 until (last.person);
    set have;
    by person visitnumber; * visitnumber in by only to enforce expectation of orderness;
  end;
  _i_ = _n_;
  * apply the criteria "last 5 rows in group";
  do _n_ = 1 to _n_;
    set have;
    if _i_ - _n_ < 5 then output;
  end;
run;