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

如何用SAS判断用户的Acct_ID是否存在历史交易记录

需求说明:判断数据集中的Acct_ID是否曾被使用过

字段定义

  • Primary_ID:用户唯一标识(每个用户仅拥有一个Primary_ID,所有账户均归属于该标识)
  • Acct_ID:账户唯一标识
  • Transaction_DT:交易发生日期

具体问题

如何判断用户在某笔交易对应的Acct_ID上是否有过往交易?例如:Primary_ID=001在07OCT2022有Acct_ID=101的交易,此前该用户于05JAN2020使用过该账户;Primary_ID=002的情况类似。需通过SAS实现该判断,寻求技术协助。

数据集示例

Primary_IDAcct_IDTransaction_DT
00110105JAN2020
00110010MAY2021
00110315MAY2021
00110107OCT2022
00211023SEP2021
00211120DEC2021
00211003OCT2022

SAS实现方案

方法1:排序后利用分组标记

先按用户、账户、交易日期排序,再通过分组逻辑直接标记是否为首次交易:

/* 排序:确保同一用户同一账户的交易按时间顺序排列 */
PROC SORT DATA=original_data;
    BY Primary_ID Acct_ID Transaction_DT;
RUN;

/* 标记是否有过往交易 */
DATA result_data;
    SET original_data;
    BY Primary_ID Acct_ID;
    /* FIRST.Acct_ID为1时,是该用户该账户的第一笔交易,无过往记录 */
    has_prior_transaction = NOT FIRST.Acct_ID;
RUN;

方法2:SQL分组计算首次交易日期对比

通过分组获取每个用户每个账户的首次交易日期,再与当前交易日期对比:

PROC SQL;
    CREATE TABLE result_data AS
        SELECT 
            t.*,
            CASE WHEN t.Transaction_DT > g.first_dt THEN 1 ELSE 0 END AS has_prior_transaction
        FROM original_data t
        LEFT JOIN (
            SELECT Primary_ID, Acct_ID, MIN(Transaction_DT) AS first_dt
            FROM original_data
            GROUP BY Primary_ID, Acct_ID
        ) g ON t.Primary_ID = g.Primary_ID AND t.Acct_ID = g.Acct_ID;
QUIT;

结果说明

处理后的数据集新增has_prior_transaction字段:

  • 0:该交易是该用户该账户的首次交易,无过往记录
  • 1:该交易之前,该用户已使用过此账户

内容的提问来源于stack exchange,提问作者NewbieCode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:20:27