sas - 如何以有效的方式连接多列是sas
问题描述
我的表中有八列,我将两列与其他六列连接为
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;
我正在为每个字段创建两个数据集,然后将它们合并为一个集合。
请提出更好的方法
解决方案
利用CATX(",", thing1, thing2,...)
CATX
将与分隔符连接,并以永远不会获得两个连续分隔符或仅前导或仅尾随分隔符的方式处理缺失值。
推荐阅读
- javascript - FileReader onLoad 未触发
- java - Android API 版本 27 仍使用 SQLite 3.8。如何更新到 SQLite 数据库 3.19?
- python - 在 python 中显示 10 个第一个素数斐波那契数
- c - sscanf 和 scanset 停止读取十六进制数字
- python - Creating a GUI for Selenium
- java - How do I solve the error: Failed to load keystore type [PKCS12 ]
- vuejs2 - Vuetify v-data-table drag and resizable columns together
- r - Results from MATLAB's crosscorr function and R's ccf different
- c# - How do I save data in related tables?
- javascript - 使用 discord.js v12 的 rate 命令