我有以下内容,其中包含日期,访问次数和感兴趣的特定变量。我想保留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
任何见识将不胜感激。
答案 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;