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

如何使用SAS按ID提取唯一非空账户邮箱?

问题:提取特定ID的唯一非空账户邮箱

需要为特定ID返回唯一的账户邮箱,部分ID对应多个邮箱但存在重复值,还包含空值,尝试用循环实现但未成功。

现有数据集 HAVE:

ID  ACCOUNT_EMAIL
114 email_1@gmail.com
114 email_1@gmail.com
114 email_2@gmail.com
114 .

期望得到的数据集 WANT:

ID  ACCOUNT_EMAIL
114 email_1@gmail.com
114 email_2@gmail.com

以下是尝试编写的SAS代码:

CREATE TABLE test AS 
SELECT DISTINCT
ID
,UPPER(ACCOUNTEMAILADDRESS) AS Account_Email
FROM DATABASE
;QUIT;

PROC SORT DATA=test;
BY ID
descending Account_Email;
Run;

DATA test;
SET test;
BY ID descending Account_Email;
IF last.Account_Email AND Account_Email = '' THEN dupIND = "Y";
ELSE dupIND = "N";;
RUN;

解决方案

方法1:SQL一步实现(推荐)

直接通过SQL过滤空值并去重,同时可统一邮箱大小写:

CREATE TABLE WANT AS
SELECT DISTINCT
    ID,
    UPPER(ACCOUNT_EMAIL) AS ACCOUNT_EMAIL /* 不需要大写可去掉UPPER */
FROM HAVE
WHERE ACCOUNT_EMAIL IS NOT NULL; /* 排除空值 */
QUIT;

方法2:DATA步+PROC SORT

先过滤空值,再排序去重:

/* 第一步:过滤空值观测 */
DATA temp;
    SET HAVE;
    WHERE ACCOUNT_EMAIL IS NOT NULL;
RUN;

/* 第二步:按ID和邮箱排序,保留唯一组合 */
PROC SORT DATA=temp OUT=WANT NODUPKEY;
    BY ID ACCOUNT_EMAIL;
RUN;

原代码问题说明

  1. 列名不匹配:原代码中使用ACCOUNTEMAILADDRESS,但数据集实际列名为ACCOUNT_EMAIL,属于笔误;
  2. 逻辑冗余:无需标记重复标识dupIND,直接过滤空值后去重即可满足需求,无需额外复杂判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:00:10