我试图确定最近连续四年发生的事件。假设我有以下示例。
Rungroup Year
1 2003
1 2004
1 2005
1 2006
1 2008
1 2009
2 2003
2 2004
2 2005
2 2007
2 2008
2 2009
3 2003
3 2004
基于以下代码,我要删除至少四年不连续的年份。此方法有两个步骤。第一步是将序列号赋予连续的年份。第二步基于前瞻方法。
data have;
set have;
by rungroup;
lyear=lag(year);
if first.rungroup then lyear=.;
if year =1+ lyear then group1+1;
else group1=0;
run;
data have3;
set have2;
by rungroup;
set have2 ( firstobs = 2 keep = group1 rename = (group1 = next2) )
have2 ( obs = 1 );
next2 = ifn( last.rungroup, (.), next2 );
set have2 ( firstobs = 3 keep = group1 rename = (group1 = next3) )
have2 ( obs = 2 );
next3 = ifn( last.rungroup, (.), next3 );
set have2 ( firstobs = 4 keep = group1 rename = (group1 = next4) )
have2 ( obs = 3 );
next4 = ifn( last.rungroup, (.), next4);
if next4>=3 or next3>=3 or next2>=3 or group1>=3 then output;
run;
这是识别连续观察结果的有效方法吗?任何评论将不胜感激。
答案 0 :(得分:0)
如果您的目标是标记同一组中至少4年的连续序列中的所有obs部分,那么这是一种方法
export function fetchData(id) {
return function(dispatch) {
REST.jsonRestGet(`data/sos/${id}`, Data.prepareSosData(
(data) => {
console.log(data);
return data; // returns undefined
}))
}
}