sas merge nomatch仅对一个表有条件

时间:2014-04-16 14:26:16

标签: merge sas conditional no-match

我有4张桌子:

  1. 一个包含在三月份(发布或回复)的用户列表(字段email1)
  2. 一个用jan制作的用户回复(有几个字段,但我需要使用Mailfrom_Address)
  3. 另一个用feb做的回复(几个字段,但我需要使用Mailfrom_Address)
  4. 和另一个发布jan,feb和march用户(此表有email1)
  5. 我需要让表1中的用户在3月份开始做某事。这意味着我需要从表1中排除表2或表3或表4中的用户(但仅适用于月份jan& feb ..这里是我的问题:表4中的这个条件)。

    我开始使用此代码。

    data lib.all_emails_march_start (keep= email1);
    merge lib.all_emails_march (IN=In1) 
    lib.replies_ene_2 (rename= (Mailfrom_Address=email1)) (IN=In2)
    lib.replies_feb_2 (rename= (Mailfrom_Address=email1)) (IN=In3)
    lib.listings_5 where anomes in ('2014-01', '2014-02') (IN=In4);
    by email1;
    if (In1=1 and In2=0 and In3=0 and In4=0) then output lib.all_emails_march_start;
    run;
    

    但条件应仅适用于表4(listings_5),而此变量(anomes)不在其他表(1到3)中,因此我不知道如何执行此操作。

    我想只在一个stp中执行此操作,而不是首先创建仅包含jan和feb的列表的表。你能给我一些想法吗?

    感谢!!!! :D:D:D

1 个答案:

答案 0 :(得分:2)

PROC SQL可能更适合这个......

proc sql ;
  create table lib.all_emails_march_start as
  select *
  from lib.all_emails_march 
  where user not in(select distinct user from lib.replies_ene_2)
    and user not in(select distinct user from lib.replies_feb_2)
    and user not in(select distinct user from lib.listings_5 
                    where anomes in ('2014-01', '2014-02'))
  ;
quit ;