我有以下数据集,其中每个员工都与经理职位相关联。现在需要使用经理职位找到员工的经理的员工ID。如果在直接经理的职位上没有一个是 ACTIVE 的,那么我们需要找到经理的经理职位,并发现任何 ACTIVE 员工都与该职位相关联。这需要一直持续到找到 ACTIVE 管理器。
ID -> Employee ID
PSTN -> Employee Position code
MPSTN-> Manager Position code
STAT -> Employee Status (T - Term A - Active)
输入数据集:
data input;
input id pstn mpstn stat$;
datalines;
1 10 30 A
2 20 30 T
3 30 40 T
6 30 40 T
4 40 50 A
7 40 50 T
5 50 50 A
;
run;
预期输出数据集:
ID MGR_ID
1 4
2 4
3 4
6 4
4 5
7 5
5 5
我用 POINT 函数尝试了问题的递归性质。
除了递归部分外,它工作正常 - 其中搜索下一级活动管理器。
data output ;
set input;
flag = 1;
do I = 1 to last while (flag=1);
set input(rename=(pstn=pstn1 stat=stat1 mpstn=mpstn1 id=id1)) nobs=last
point=I;
if mpstn = pstn1 and stat1 = 'A' then
do;
MGRID = id1;
I=1;
flag=0;
end;
else flag=1;
end;
run;
请帮我解决一下这个。