首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS日期计数器

SAS日期计数器
EN

Stack Overflow用户
提问于 2019-08-04 19:03:19
回答 2查看 50关注 0票数 1

我有2列Start_date和end_date,对于一个特定的个体,start_date和End_date上有多个行,我想计算第二行的sTART_DATE --第一行的END_DATE之间的天数。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-04 21:56:13

  1. 根据日期进行排序,以便您可以使用延迟()函数
  2. 获取延迟的开始日期
  3. 计算差 *创建用于测试的示例数据;数据有;输入人员$ Start : ddmmyy10。结束: ddmmyy10.;格式开始结束date9.;卡片;A 5/11/2019 /11/2019 A 14/11/2019 20/11/2019 A 1/12/2019 10/12/2019 A 12/2019 19/2019 19/12/2019 B 1/2018年5/1 2018年5/1 2018年B9/1 2018年11/1/2018年;按使用滞后日期排序();data=have;按人降序开始;运行;数据想要;设置有;*按人分析;按人;*计算上一个开始日期;lagStart=lag(开始);*如果不是第一个记录,则执行计算;如果不是first.person,则为diff=lagStart - end;否则,diff=.;格式化lagStart date9.;运行;*按所需顺序排序;proc sort data=want;by person start;run;diff=.;format lagStart date9.;
票数 2
EN

Stack Overflow用户

发布于 2019-08-05 08:52:19

您可以使用retain语句。算法的其余部分重复@Reeza解决方案:

代码语言:javascript
复制
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;

输入:

代码语言:javascript
复制
+--------+-----------+-----------+
| Person |   Start   |    End    |
+--------+-----------+-----------+
| A      | 12DEC2019 | 19DEC2019 |
| A      | 01DEC2019 | 10DEC2019 |
| A      | 14NOV2019 | 20NOV2019 |
| A      | 05NOV2019 | 09NOV2019 |
| B      | 09JAN2018 | 11JAN2018 |
| B      | 01JAN2018 | 05JAN2018 |
+--------+-----------+-----------+

输出:

代码语言:javascript
复制
+--------+-----------+-----------+------+
| 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 |
+--------+-----------+-----------+------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57349443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档