人々がいつ、どのくらいの時間、どのチャンネルでラジオを聞いているかについてのデータがあります。ラジオがオンになっている間に発生するすべてのエントリをグループ化する、sessions という変数を作成する必要があります。データにはいくつかのエラーが含まれている可能性があるため、1 つのチャネル期間の終わりから次のチャネル期間までの経過時間が 5 分未満の場合、それは同じセッションであると言いたいと思います。うまくいけば、簡単な例が明確になります。
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 + (5 分) < entry_time(次のチャネル) の場合にセッションが変更されるようにする必要があります。これは私を殺し、単純な配列ではうまくいかないか、配列を使用しようとしてもうまくいきませんでした。前もって感謝します
次のコードはうまく機能しますが、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;