2016-01-22 69 views
0

初学者在这里,我希望这不是一个模糊的问题。SAS:通过一个表循环,并插入行

背景:我有一张表,其中Inventor ID与Years关联。这代表了Inventor注册专利的所有年份。

PROC SQL; 
    CREATE TABLE Inv_Year AS 
     SELECT a.InventorID, a.Year 
     FROM Inv_Year_Pat AS a; 
QUIT; 

所以行看起来是这样

InventorID | Year 
1   1989 
2   2002 
3   1990 
3   1992 
3   1994 

任务:发明家3号于1990年,1992年和1994年发明了嗯,我需要填写任何一年发明者的活跃年之间。导致此...

InventorID | Year 
1   1989 
2   2002 
3   1990 
3   1991 
3   1992 
3   1993 
3   1994 

我该如何解决SAS中的这个问题?

回答

2
 
data want ; 
    set have ; 
    by InventorID ; 

    prevYear = lag(Year) ; 
    if first.InventorID then prevYear = . ; 

    /* If not first row per InventorID and difference is > 1 year */ 
    if not missing(prevYear) and sum(Year,-prevYear) > 1 then do ; 
    /* Store current Year */ 
    thisYear = Year ; 
    /* Insert missing years */ 
    do Year = prevYear + 1 to thisYear ; 
     output ; 
    end ; 
    end ; 
    else output ; 

    drop prevYear thisYear ; 
run ; 
相关问题