2016-01-22 34 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 ;