找回密码
 注册
查看: 4239|回复: 1

跟版主crackman读SAS程序(2)

[复制链接]
发表于 2010-8-27 14:29:02 | 显示全部楼层 |阅读模式
本帖最后由 生统家园推荐 于 2010-8-27 14:36 编辑

原程序和解答在这里,想分解一下答案程序
data a;
        input nbr code;
        datalines;
        13900000000 10102345
13900000000 10102346
13900000000 10102347
13900000000 10102348
13900000001 10102345
13900000001 10102346
13900000001 10102349
13900000002 10102345
13900000002 10102347
13900000002 10102349
13900000003 10102345
13900000003 10102346
13900000003 10102348
13900000003 10102349
;

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组合的唯一不重复。

回复

使用道具 举报

发表于 2013-4-18 10:32:34 | 显示全部楼层
SQL的结构很漂亮,很专业呀。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 21:55 , Processed in 0.028310 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表