run;
proc sql;
create table b as
select
a.code as prom_1
,b.code as prom_2
,count(distinct a.nbr) as Csr_Cnt
from a a
inner join a b
on a.code<b.code
and a.nbr=b.nbr
group by
a.code
,b.code
;
quit;
首先soporaeternus 哥们的SQL确实很不错,学SQL,可以看看他的程序,学习的地方太多了。
对于这个程序思路如下:
首先利用在SQL中的同一个数据集不同的别名,克隆另外一个相同的数据集,利用ON语句中条件,以及INNER JOIN进行CODE的组合,这个是解决问题的关键,先形成组合。因为不同NBR的CODE组合,有些相同,有些不相同,于是用GROUP BY 来排除重复的组合,保证组合的唯一性,为后面计算NBR提供正确唯一的组合。因为不同的NBR可能存在相同的CODE组合,反过来,同一个的CODE组合存在不同的NBR,因为我们计算的是NBR的个数,因此我们在GROUP BY 限定了CODE组合的唯一性,然后利用COUNT函数来计算NBR的个数,思路就是这样,想起来其实也不难,关键是面对数据的时候要快速的理清思路很关键。这里指的学习是:克隆相同的数据集,GROUP BY 保证CODE组合的唯一不重复。