我需要对表执行递归计数操作,但这是我面临的挑战。
假设我有表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来执行此操作。我不需要单独的宏来每次使用不同的表调用查询。
答案 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的记录。