You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求生成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:37:23