如何在 SAS 数据步骤中执行"where x in ..."语句



我有一个大型 SAS 数据表,其中包含一堆针对我的整个基本客户群 (Master_v01) 的指标。 我有一个单独的数据表,其中包含要从分析中排除的客户列表 (Excluded_Cust)。

是否可以做这样的事情:

data Master_v02;
set Master_v01;
where cust not in (select cust from Excluded_Cust);
run;

这可能吗?

如果没有,实现我期望的目标的最佳方法是什么,让我的基表与那些我希望排除的客户从数据中删除?

以下是将宏

变量与 where 子句一起使用的另一种方法:

proc sql noprint;
    select
        quote(cust)
    into
        :cust_exclude
    separated by
        " or cust ne "
    from
        Excluded_Cust
    ;
quit;
data Master_v02;
    set Master_v01;
    where cust ne &cust_exclude;
run;

我的数据步骤代码有点生疏,但您可以通过查找值并检查匹配项来执行此操作。 我认为这是:

data Master_v02;
    set Master_v01;
    set Excluded_Cust key=cust;
    if _iorc_ = 0 then delete;
run;

当然,建议在Excluded_Cust中使用cust指数。

我能想到的两种方法:

1.程序

proc sql;
  create table Master_v02 as
    select * 
      from Master_v01
      where cust not in (select cust from Excluded_cust);
quit;

2.数据步骤合并

首先按客户对数据集进行排序Master_V01和Excluded_cust,然后:

data Master_V02;
  merge Master_V01 (in=Mast)
        Excluded_cust (in=Excl);
  by cust;
  if Mast and not Excl;
run;

相关内容

  • 没有找到相关文章

最新更新