Proc sql以递归方式从不同表中提取数据

时间:2015-03-06 19:41:19

标签: recursion sas proc-sql

我需要对表执行递归计数操作,但这是我面临的挑战。

假设我有表A,B,C,D,E,F,...... Z

以下是我所拥有的代码段

Proc sql;
create table temp as(
select count(*) 
from a 
inner join b on a.id = b.id
inner join c on a.id = c.id
inner join d on a.id = d.id
where <condition>
);

完成此代码后,我需要使用B,C,D和E运行相同的查询,并在我尝试创建的相同临时表中更新结果。这样我必须为我拥有的整个表列表做。

是否有递归sql来执行此操作。我不需要单独的宏来每次使用不同的表调用查询。

1 个答案:

答案 0 :(得分:2)

我不会这么做。

proc sql;
  create table temp as (
    select count(case when n(a.id,b.id,c.id,d.id)=4 then 1 else 0 end) as abcd_count,
      count(case when n(b.id,c.id,d.id,e.id)=4 then 1 else 0 end) as bcde_count
    from a outer join b on a.id=b.id
      outer join c ... etc.
;
quit;

IE,只需做一次连接并在...时使用案例来确定您需要的计数。在这里,我使用n()来识别包含所有4个ID的记录。