我从外部邮件系统中获取以下数据,其中Mail_id对于一批电子邮件是唯一的。
Email Mail_id Read_date
a 1 12.jan
b 1 12.jan
c 1 14.jan
a 2 14.jan
b 2 14.jan
c 2 16.jan
我正在尝试使用Email和Read_date将这些数据映射回通信日志。为此,我假设至少有一个收件人在发送批次的同一天读取电子邮件。在上面的示例中,3个客户中有2个读取了电子邮件12. jan,它与通信日志中的Send_date相同。这一切都很好。但是,带有Mail_id“1”的e_mail“c”读取电子邮件14.jan。由于这个客户属于mail_id = 1的批处理,我可以重新编码这个数据= 12 jan。然后我就可以将它映射回发送日期= 12 jan的通信日志。由于批次非常大,这种逻辑对于99%都是正确的。重新编码的文件看起来像
Email Mail_id Read_date
a 1 12.jan
b 1 12.jan
c 1 12.jan
a 2 14.jan
b 2 14.jan
c 2 14.jan
因此,给定排序表我想如果mail_id中的first.read_date和last.read_date是相同的,那么什么都不做,但如果它们不相同则重新编码整个列Read_date = first.date。但我不知道如何在SAS中编写代码。有什么建议吗?
答案 0 :(得分:1)
不要担心“什么都不做”;只是“做所有事情”,它与“不做任何事”没有区别。
data want;
set have;
by mail_id;
retain sent_date;
if first.mail_id then sent_date=read_date;
read_date=sent_date;
drop sent_date;
run;
我实际上建议将read_date保持为实际的read_date,而使用sent_date作为单独的字段,因为实际上这些是两个不同的东西。只需删除最后两行(run;
除外),你就可以得到它。