Date SAS日期计数器
对于一个特定的个人,我有两列开始日期和结束日期。开始日期和结束日期上有多行,我想计算第二行开始日期和第一行结束日期之间的天数Date SAS日期计数器,date,sas,Date,Sas,对于一个特定的个人,我有两列开始日期和结束日期。开始日期和结束日期上有多行,我想计算第二行开始日期和第一行结束日期之间的天数 Person Start End A 5/11/2019 9/11/2019 I need to get 14/11/2019-9/11/2019 = 4 A 14/11/2019 20/11/2019 Like wise 10 A 1/12/2019 10/12/2019 2 A 12/12/2019
Person Start End
A 5/11/2019 9/11/2019 I need to get 14/11/2019-9/11/2019 = 4
A 14/11/2019 20/11/2019 Like wise 10
A 1/12/2019 10/12/2019 2
A 12/12/2019 19/12/2019 0
B 1/1/2018 5/1/2018 4
B 9/1/2018 11/1/2018 0
*create sample data for testing;
data have;
input Person $ Start : ddmmyy10. End : ddmmyy10.;
format start end date9.;
cards;
A 5/11/2019 9/11/2019
A 14/11/2019 20/11/2019
A 1/12/2019 10/12/2019
A 12/12/2019 19/12/2019
B 1/1/2018 5/1/2018
B 9/1/2018 11/1/2018
;
run;
*sort by descending date to use LAG();
proc sort data=have;
by person descending start;
run;
data want;
set have;
*analyze by person;
by person;
*calculate the previous start date;
lagStart=lag(Start);
*do the calculation if not the first record for the person;
if not first.person then
diff=lagStart - end;
else
diff=.;
format lagStart date9.;
run;
*sort back to desired order;
proc sort data=want;
by person start;
run;
您可以使用
retain
语句。算法的其余部分重复@Reeza解决方案:
proc sort data=have;
by person descending start;
run;
data want(drop=tStart);
set have;
by person;
retain tStart;
if not first.person then do;
diff = tStart-End;
end;
else do;
diff = 0;
end;
tStart = Start;
run;
proc sort data=want;
by person start;
run;
输入:
+--------+-----------+-----------+
| Person | Start | End |
+--------+-----------+-----------+
| A | 12DEC2019 | 19DEC2019 |
| A | 01DEC2019 | 10DEC2019 |
| A | 14NOV2019 | 20NOV2019 |
| A | 05NOV2019 | 09NOV2019 |
| B | 09JAN2018 | 11JAN2018 |
| B | 01JAN2018 | 05JAN2018 |
+--------+-----------+-----------+
+--------+-----------+-----------+------+
| Person | Start | End | diff |
+--------+-----------+-----------+------+
| A | 05NOV2019 | 09NOV2019 | 5 |
| A | 14NOV2019 | 20NOV2019 | 11 |
| A | 01DEC2019 | 10DEC2019 | 2 |
| A | 12DEC2019 | 19DEC2019 | 0 |
| B | 01JAN2018 | 05JAN2018 | 4 |
| B | 09JAN2018 | 11JAN2018 | 0 |
+--------+-----------+-----------+------+
输出:
+--------+-----------+-----------+
| Person | Start | End |
+--------+-----------+-----------+
| A | 12DEC2019 | 19DEC2019 |
| A | 01DEC2019 | 10DEC2019 |
| A | 14NOV2019 | 20NOV2019 |
| A | 05NOV2019 | 09NOV2019 |
| B | 09JAN2018 | 11JAN2018 |
| B | 01JAN2018 | 05JAN2018 |
+--------+-----------+-----------+
+--------+-----------+-----------+------+
| Person | Start | End | diff |
+--------+-----------+-----------+------+
| A | 05NOV2019 | 09NOV2019 | 5 |
| A | 14NOV2019 | 20NOV2019 | 11 |
| A | 01DEC2019 | 10DEC2019 | 2 |
| A | 12DEC2019 | 19DEC2019 | 0 |
| B | 01JAN2018 | 05JAN2018 | 4 |
| B | 09JAN2018 | 11JAN2018 | 0 |
+--------+-----------+-----------+------+
14-9是5不是4?请张贴您尝试过的任何内容。