SAS:循环遍历表,并插入行

时间:2016-01-22 09:50:02

标签: sql tsql multidimensional-array sas

初学者,我希望这不是一个模糊的问题。

背景:我有一张表与Inventor ID相关联的表格。这代表了发明人注册专利的所有年份。

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

任务:发明人在1990年,1992年和1994年发明了第3号。我需要填写发明人活跃年份之间的任何一年。导致这......

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

如何在SAS中解决此问题?

1 个答案:

答案 0 :(得分: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 ;