Sql SAS:在表中循环并插入行
这里是初学者,我希望这不是一个模糊的问题 背景:我有一个表,其中Inventor ID链接到年份。代表发明人注册专利的所有年份Sql SAS:在表中循环并插入行,sql,tsql,multidimensional-array,sas,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
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中解决此问题
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 ;
数据需求;
集有;
发明家;
上一年=滞后(年);
如果first.InventorID,则prevYear=;
/*如果不是每个InventorID的第一行,且差异大于1年*/
如果未缺失(上一年)和总和(上一年)>1,则执行该操作;
/*存储本年度*/
今年=年;
/*插入缺失的年份*/
do年=上一年+1至本年;
产出;
结束;
结束;
其他输出;
今年下降;
跑
数据需求;
集有;
发明家;
上一年=滞后(年);
如果first.InventorID,则prevYear=;
/*如果不是每个InventorID的第一行,且差异大于1年*/
如果未缺失(上一年)和总和(上一年)>1,则执行该操作;
/*存储本年度*/
今年=年;
/*插入缺失的年份*/
do年=上一年+1至本年;
产出;
结束;
结束;
其他输出;
今年下降;
跑