代码之家  ›  专栏  ›  技术社区  ›  Azeem112

如何有效地连接多个列是SAS

sas
  •  0
  • Azeem112  · 技术社区  · 6 年前

    我的have表中有八列,我将两列和其他六列连接为

    data case;
    set case;
    
    stage1_to = cats(stage1_to, ',' , email_to);
    stage1_cc = cats(stage1_cc, ',' , email_cc);
    
    stage2_to = cats(stage2_to, ',' , email_to);
    stage2_cc = cats(stage2_cc, ',' , email_cc);
    
    stage3_to = cats(stage3_to, ',' , email_to);
    stage3_cc = cats(stage3_cc, ',' , email_cc);
    run;
    

    现在,作为阶段的一个基础,我将向不同的用户发送不同的邮件。

    样本数据

    email_to =  email@to.com
    email_cc =  email@cc.com
    stage1_to = stage1@to.com
    stage1_cc = stage1@cc.com
    stage2_to = stage2@to.com
    stage2_cc = stage2@cc.com
    stage3_to = stage3@to.com
    stage3_cc = stage3@cc.com
    

    我的代码将所有阶段列与email_to和email_cc连接起来。

    • 如果缺少阶段的“收件人”或“抄送”列,则将数据附加为
      “,email@to.com”和“,email@cc.com”和系统引发错误
      因为“email@to.com”不是有效的电子邮件。

    • 如果未提供电子邮件抄送或同时提供电子邮件抄送和阶段抄送栏,则相同
      其中没有数据,只会更新“,”或“stage2@cc.com”, 这又是一封无效的电子邮件。

    请给我一个好方法来解决所有这些错误。在前端,电子邮件“收件人”是必需的,所有其他字段都是可选的。我的主要目标是将舞台栏目与email-to和email-cc结合起来。

    电邮收件人和电邮收件人

    目前我正在做这个

    data case_stage1_to_concatenate;
    set case;
    
    stage1_to = cats(stage1_to, ',' , email_to);
    where stage1_to ne "" and email_to ne "";
    run;
    
    data case_stage1_to_update;
    set case;
    
    stage1_to = email_to;
    where stage1_to eq "";
    run;
    

    我正在为每个字段创建两个数据集,然后使用union将其设置为单个集。

    请建议一个更好的方法

    1 回复  |  直到 6 年前
        1
  •  0
  •   Richard    6 年前

    使用 CATX(",", thing1, thing2,...)

    CATX 将与分隔符连接,并以这样的方式处理缺少的值:永远不会得到两个连续的分隔符,也不会只得到一个前导或尾随的分隔符。