Определите 4 последовательных наблюдения - PullRequest
0 голосов
/ 10 июня 2019

Я очень новичок в SAS и буду очень признателен за некоторые рекомендации. Я создал многотысячный набор данных наблюдений, в котором мне нужно идентифицировать появление 4 последовательных ежемесячных экземпляров - по двум полям (человек, клерк). То есть: «Клерки, которые связывались с Лицами 4 месяца подряд, в течение 13 месяцев»

При подготовке я присваивал каждому году-месяцу (т.е. 2016.01, 2019.02) значение INT, указывающее его место в течение 13-месячного промежутка времени, который мне небезразличен.

Вот пример макета:

PersonID    ClerkID monthINT
123456          789415  1
123456          789415  2
123456          789415  3
123456          789415  4
123456          789415  6
123456          789415  8
123456          789415  10
123456          789415  11
123456          789415  12
123456          789415  13

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Просто ведите счет. Сброс счетчика, когда вы нажмете новый идентификатор или пробел.

data want;
  set have ;
  by PersonID ClerkID monthINT ;
  if monthint-1=lag(monthint) and not first.clerkid then run_length+1;
  else run_length=1;
  flag = run_length >= 4;
run;

Результат:

       Person     Clerk    month     run_
Obs      ID        ID       INT     length    flag

  1    123456    789415       1        1        0
  2    123456    789415       2        2        0
  3    123456    789415       3        3        0
  4    123456    789415       4        4        1
  5    123456    789415       6        1        0
  6    123456    789415       8        1        0
  7    123456    789415      10        1        0
  8    123456    789415      11        2        0
  9    123456    789415      12        3        0
 10    123456    789415      13        4        1
0 голосов
/ 10 июня 2019

Вы можете использовать SQL для получения желаемого набора результатов с помощью самостоятельного объединения.

Критерии объединения self.monthInt between each.monthId and each.monthId-3 находят кандидатов с интервалами в 4 месяца, а наличие критериев count (distinct each.monthInt) = 4 обеспечивает взаимодействие вкаждый месяц в интервале кандидатов.

select self.PersonId, self.ClerkID, max(self.monthInt) as monthOf4thInteraction
from 
  have as self
join 
  have as each
on 
  self.PersonId = each.PersonId and
  self.ClerkId = each.ClerkId and
  self.monthInt between each.monthId and each.monthId-3
group by 
  self.PersonId, self.ClerkId, self.monthInt
having count (distinct each.monthId) = 4
...