data old;
input name $ date yymmdd10.;
cards;
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
;
run;
proc sort data=old out=old_s;
by name date;
run;
data new(drop=date1);
set old_s;
by name;
retain cha 0;
date1=lag(date);
if first.name then cha=0 ;
else cha=date-date1;
run;
你试试这样行吗?还需要在测试一下。我感觉应该用lag函数。仅供参考。
data old;
input name $ date yymmdd10.;
cards;
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
;
run;
proc sort data=old out=old_s;
by name date;
run;
data new(drop=date1);
set old_s;
by name;
retain date1;
if first.name then date1=date;
a=date-date1;
if not last.name then date1=date;
if last.name then date1=0;
run;
data a;
input name $ date yymmdd10.;
datalines;
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
;
run;
proc sort data=a out=b;
by name date;
run;
data c;
set b;
by name;
retain date1;
if first.name then date1=date;
date2=date1;
date1=date;
dif=date-date2;
drop date1 date2;
run;
proc print data=c;
format date yymmdd10.;
run;