我有类似下面的数据,需要计算 Event_date 列中按 Subject_ID 分组的日期之间的平均时间(以月为单位)。换句话说,对于数据中的每个主题,我需要知道与该主题相关的事件之间的平均月数。每个主题都有不同数量的相关事件。有没有相对简单的方法可以做到这一点?我知道如何在 R 中做到这一点,但我对 SAS 还比较陌生,还没有找到解决方案。
提前感谢这个社区提供的任何帮助!
主题ID | 活动日期 |
---|---|
1 | 日期_1 |
1 | 日期_2 |
1 | 日期_3 |
2 | 日期_1 |
2 | 日期_2 |
3 | 日期_1 |
3 | 日期_2 |
3 | 日期_3 |
3 | 日期_4 |
3 | 日期_5 |
3 | 日期_6 |
4 | 日期_1 |
4 | 日期_2 |
5 | 日期_1 |
5 | 日期_2 |
5 | 日期_3 |
5 | 日期_4 |
6 | 日期_1 |
6 | 日期_2 |
在 SAS 中,您可以利用按组处理。我们知道我们需要将每个日期与前一个日期进行比较,但我们不想对组中的第一个日期进行此操作。要完成此任务,我们需要了解两个函数:
lag()
:获取前一行的值intck()
:计算两个日期之间的时间间隔(例如天、月、年等)对于除第一行之外的每一行,我们想要运行
itnck('month', lag(date), date)
该函数来计算事件之间的月份数。但是滞后函数有点特殊,在条件语句中的表现并不如预期,所以我们只需在每一行上运行它,并将每组中的第一行设置为缺失值。从那里,您可以运行 SQL 或 PROC MEANS 之类的程序来获取每个组日期之间的平均值。