在SAS中重新编码表

时间:2014-03-20 13:46:59

标签: sas

我从外部邮件系统中获取以下数据,其中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中编写代码。有什么建议吗?

1 个答案:

答案 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;除外),你就可以得到它。