SAS技术求助:按唯一请求ID提取审批人并生成新列
解决方案
针对你的需求,我们可以通过两步操作实现:先提取每个request no对应的审批人,再将其合并回原数据集生成approver列。以下是两种适合SAS新手的实现方式:
方法1:使用PROC SQL(推荐,代码简洁)
/* 第一步:提取每个request no对应的审批人 */ proc sql; create table approver_list as select distinct request_no, to_user as approver from 你的原数据集名 where workflow_status like '%approval%'; /* 筛选包含approval的状态 */ quit; /* 第二步:将审批人列合并回原数据集 */ proc sql; create table 最终数据集 as select a.*, b.approver from 你的原数据集名 a left join approver_list b on a.request_no = b.request_no; quit;
代码说明
distinct确保每个request no只保留一条审批人记录(如果同一申请有多个审批人,会保留所有唯一值,若需取第一个可调整逻辑)like '%approval%'匹配所有包含"approval"的状态文本left join保证原数据集的所有记录都被保留,即使没有对应审批人时approver列会显示缺失值
方法2:使用DATA STEP(适合理解分组逻辑)
/* 先对原数据集按request no排序 */ proc sort data=你的原数据集名 out=sorted_data; by request_no; run; /* 提取每个request no的审批人 */ data approver_list; set sorted_data; by request_no; if workflow_status like '%approval%' and first.request_no then do; /* 取每个申请的第一个审批人 */ approver = to_user; output; keep request_no approver; end; run; /* 合并回原数据集 */ data 最终数据集; merge sorted_data approver_list; by request_no; run;
代码说明
proc sort确保同一request no的记录集中在一起first.request_no标记每个分组的第一条记录,这里用来提取每个申请的第一个审批人merge语句按request no匹配,完成列的添加
内容的提问来源于stack exchange,提问作者Niken Widowati
相关产品推荐
相关产品推荐

