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

SAS实现Office签证申请前最新申请渠道的标记需求咨询

SAS实现Office签证申请前最新申请渠道的标记需求咨询

看起来你需要从签证申请数据里,为每一条「Office渠道」的申请记录,匹配到该申请人(同一个MasterId)在这次Office申请之前的最后一次申请渠道对吧?我理解你的需求了,咱们可以用SAS的PROC SQL或者数据步来实现,下面给你两种方案参考:

先明确你的数据逻辑:比如对于MasterId=A的Office申请(Id=A2,日期31-Jan-22),我们要找的是A的所有早于31-Jan-22的申请里,日期最新的那条(也就是A3,12-Dec-21)的Method(Online),然后把这个值放到A2记录对应的蓝色字段里。

方案1:用PROC SQL实现(简洁直观)

proc sql;
    create table want as
    select 
        t1.*,
        /* 子查询获取当前Office记录对应的前置最新渠道 */
        (select t2.Method 
         from have t2 
         where t2.MasterId = t1.MasterId 
           and t2.Apply_date < t1.Apply_date 
         order by t2.Apply_date desc 
         fetch first 1 row only) as Previous_Method
    from have t1
    /* 如果只需要Office记录的结果,就加这个where条件;如果要保留所有记录,就去掉 */
    /* where t1.Method = 'Office' */
    order by t1.MasterId, t1.Apply_date desc;
quit;

代码解释:

  • 主查询遍历每条记录,对于每条记录(尤其是Method='Office'的),子查询会在同一个MasterId下,筛选出所有日期早于当前记录的申请,按日期降序排序后取第一条的Method,也就是最新的前置申请渠道。
  • 如果只需要Office记录的结果,就加上where t1.Method = 'Office';如果想保留所有记录,同时给Office记录标记前置渠道,就去掉这个条件。

方案2:用数据步实现(适合复杂逻辑扩展)

/* 先按MasterId分组,按Apply_date降序排序,这样最新的申请在最前面 */
proc sort data=have out=sorted_have;
    by MasterId descending Apply_date;
run;

data want;
    set sorted_have;
    by MasterId;
    /* 保留前一条记录的Method,用来追踪前置渠道 */
    retain last_non_office_method;
    /* 每个MasterId组开始时,重置保留变量 */
    if first.MasterId then do;
        last_non_office_method = '';
    end;
    /* 如果当前记录不是Office,就更新保留变量为当前Method */
    if Method ne 'Office' then do;
        last_non_office_method = Method;
    end;
    /* 如果当前记录是Office,就把保留的变量赋值给Previous_Method */
    else do;
        Previous_Method = last_non_office_method;
    end;
    /* 保留需要的变量,或者根据需求调整 */
    drop last_non_office_method;
run;

代码解释:

  1. 先把数据按MasterId分组,申请日期降序排序,这样每个MasterId下最新的申请排在最前面。
  2. 用retain变量来记录最近一次非Office渠道的申请方式:
    • 每个MasterId组开始时,重置变量为空;
    • 遇到非Office的记录,就更新变量为当前的Method;
    • 遇到Office的记录,就把之前记录的最新非OfficeMethod赋值给Previous_Method。
  3. 最后可以根据需求保留或删除临时变量。

验证结果

拿你的示例数据来说,运行后得到的结果应该是:

  • A2(Office)的Previous_Method是Online(对应A3的记录)
  • B1(Office)的Previous_Method是Kiosk(对应B2的记录)
  • C3(Office)的Previous_Method是Kiosk(对应C2的记录)

这样就正好匹配你想要的蓝色部分的结果啦。

备注:内容来源于stack exchange,提问作者sunnyday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:17:42