如何以有效方式串联多个列

时间:2018-07-02 14:39:14

标签: sas

我的have table中有八列,并且将两列与其他六列连接为

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连接起来。

  • 如果缺少舞台的to或cc列,则将数据附加为
    “,email @ to.com”和“,email @ cc.com”,系统抛出错误
    因为“,email @ to.com”不是有效的电子邮件。

  • 相同,如果未提供email_cc或email_cc和Stage cc列均
    里面没有数据,只会更新“”或“ stage2@cc.com” 再次是无效的电子邮件。

请向我建议一个解决所有这些错误的好方法。在前端,Email_to是必需的,所有其他字段是可选的。我的主要目标是将阶段列与email_to和email_cc结合起来。

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;

我正在为每个字段创建两个数据集,然后进行并集以使它们成为单个数据集。

请提出一个更好的方法

1 个答案:

答案 0 :(得分:0)

使用compute_30

CATX(",", thing1, thing2,...)将连接一个分隔符,并以这样的方式处理缺失值:您永远不会获得两个连续的分隔符,或者永远不会得到前导或尾随的分隔符。