请求生成SAS递归代码实现员工经理层级向上汇总
完整SAS递归获取经理下属解决方案
一、原始员工-经理数据
Employee Name, Manager Name Rajiv Bajaj, Panu Thai Panu Thai, Bob Silvers Yi Chen, Bob Silvers Ethan Ocampo, Bob Silvers Bob Silvers, Dan Shak Leo Bel, James Mane Mamie Qwong, James Mane James Mane, Dan Shak Dan Shak, George Castillo
二、需求说明
需要先将上述数据创建为SAS数据集,再通过递归方式获取每位经理的所有下属(包含间接下属),最终输出指定格式的经理-下属对应关系。
三、目标输出格式
Manager, Subordinate George Castillo, Dan Shak George Castillo, Bob Silvers George Castillo, James Mane George Castillo, Panu Thai George Castillo, Yi Chen George Castillo, Rajiv Bajaj George Castillo, Ethan Ocampo George Castillo, Leo Bel George Castillo, Mamie Qwong Dan Shak, Bob Silvers Dan Shak, James Mane Dan Shak, Panu Thai Dan Shak, Yi Chen Dan Shak, Rajiv Bajaj Dan Shak, Ethan Ocampo Dan Shak, Leo Bel Dan Shak, Mamie Qwong James Mane, Leo Bel James Mane, Mamie Qwong Bob Silvers, Rajiv Bajaj Bob Silvers, Panu Thai Bob Silvers, Yi Chen Bob Silvers, Ethan Ocampo Panu Thai, Rajiv Bajaj
四、完整SAS代码实现
1. 创建基础员工数据集
/* 创建员工-经理基础数据集 */ data employees; length Employee $20 Manager $20; input Employee & Manager &; /* 使用&读取包含空格的姓名,直到遇到逗号分隔符 */ datalines; Rajiv Bajaj, Panu Thai Panu Thai, Bob Silvers Yi Chen, Bob Silvers Ethan Ocampo, Bob Silvers Bob Silvers, Dan Shak Leo Bel, James Mane Mamie Qwong, James Mane James Mane, Dan Shak Dan Shak, George Castillo ; run;
2. 递归获取所有经理的下属关系
SAS 9.4及以上版本支持递归CTE(公共表表达式),可简洁实现层级递归查询:
/* 递归生成所有经理的直接/间接下属关系 */ proc sql; create table manager_subordinates as with recursive hierarchy as ( /* 初始层:提取直接下属关系 */ select Manager, Employee as Subordinate from employees union all /* 递归层:向上关联上级经理,获取间接下属 */ select h.Manager, e.Employee as Subordinate from hierarchy h inner join employees e on h.Subordinate = e.Manager ) /* 按经理降序、下属排序,匹配示例输出顺序 */ select Manager, Subordinate from hierarchy order by Manager descending, Subordinate; quit; /* 可选:将结果导出为CSV文件,与示例格式一致 */ proc export data=manager_subordinates outfile="manager_subordinates.csv" dbms=csv replace; putnames=yes; run;
代码说明
length语句:定义姓名变量长度,避免长姓名被截断;input &:处理包含空格的姓名,确保完整读取到逗号分隔符;- 递归CTE:
- 初始层直接提取员工与经理的直接下属关系;
- 递归层将已找到的下属作为新经理,继续关联其下属,直到遍历完所有层级;
- 排序语句:保证输出顺序与示例一致;
proc export:可选步骤,将数据集导出为CSV格式文件,方便查看。
内容的提问来源于stack exchange,提问作者CoderSavage
相关产品推荐
相关产品推荐

