我对SAS非常陌生,非常感谢您提供一些指导。我创建了一个成千上万个观测数据集,在其中我需要通过两个字段(人员,业务员)来识别4个连续的每月实例的发生。也就是说:“在13个月内,与人员连续4个月联系在一起的职员”
在准备过程中,我为每个月(即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
答案 0 :(得分:1)
只需保持运行计数即可。当您遇到新的ID或出现缺口时,请重置计数。
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
答案 1 :(得分:0)
您可以使用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