我有一些关于人们收听广播的时间、时长和频道的数据。我需要创建一个名为 session 的变量,它将收音机打开时出现的所有条目分组。因为数据可能包含一些错误,所以我想说,如果从一个通道周期结束到下一个通道周期结束不到五分钟,那么它仍然是同一个会话。希望一个简短的例子可以澄清。
id obs Entry_date Entry_time duration(in secs) channel
1 1 01/01/12 23:25:21 6000 2
1 2 01/03/12 01:05:64 300 5
1 3 01/05/12 12:12:35 456 5
2 4 01/05/12 16:45:21 657 8
我想创建变量会话,以便
id obs Entry_date Entry_time duration(in secs) channel session
1 1 01/01/12 23:25:21 6000 2 1
1 2 01/03/12 01:05:64 300 5 1
1 3 01/05/12 12:12:35 456 5 2
2 4 01/05/12 16:45:21 657 8 1
为了定义 1 个会话,我需要使用 entry_time (如果从晚上 11 点到第二天早上,则使用日期),这样如果 entry_time+duration + (5minutes) < entry_time(next channel) 那么会话会改变。这一直在杀死我,简单的数组无法解决问题,或者我使用数组的尝试没有奏效。提前致谢
以下代码运行良好,但在 id 更改时不会重新开始会话
data sirius1; /*creates sessions*/
set sirius;
by account_number entry_date_est entry_time_est; /* put in to check data is sorted correctly */
retain session 1; /* initialise session with value 1 */
session+(dif(dhms(entry_date_est,0,0,entry_time_est))-lag(duration_seconds)>300); /* increment session by 1 if time difference > 5 minutes */
run;