如何用sas的proc sql过程求数据集的关联率

1 篇文章 0 订阅
0 篇文章 0 订阅

1. 关联率是什么

有a、b两张数据表,通过外键可以进行连接,a表中的数据可以连接到b表的数量占a表数据总量的比例

2. 创建测试用表

为节省篇幅,此处省略创建过程


上图分别为表 T1、T2、T3 、T4

3. 单外键关联

这里区分两种写法,一种是“in”关键字,一种是“=”操作符

proc sql;
	select * from t1,t2 where t1.alpha in (select * from t2);
quit;

proc sql;
	select * from t1 where t1.alpha in (select * from t2);
quit;

proc sql;
	select t1.* from t1,t2 where t1.alpha in (select * from t2);
quit;

proc sql;
	select * from t2 where t2.alpha in (select * from t1);
quit;

结果如下


由此看出,最接近我们需要的结果是第二种和第四种“in”操作符的写法

--------

proc sql;
	select * from t1,t2 where t1.alpha=t2.alpha;
quit;

proc sql;
	select t1.* from t1,t2 where t1.alpha=t2.alpha;
quit;
结果如下

正常情况下,表t1对t2的关联率为4/5,表t2对t1的关联率为1,即使用“in”关键字计算的结果。

而“=”操作符的结果是不分主次的,是对笛卡儿积的判断筛选,当关系为一对一和一对多时,可以对结果进行去重求关联率,而当关系为多对一或多对多时无法求关联率。

4. 多外键关联

proc sql;
	select * from t3 where t3.alpha,t3,number in (select * from t4);
quit;
首先以上写法是错误的,“in”关键字只能针对一个字段进行查找,所以改为如下写法

proc sql;
	select * from t3 where t3.alpha in (select t4.alpha from t4 where t3.number=t4.number);
quit;
结果如下

左图为子查询结果,右图为整条语句的结果

--------

proc sql;
	select * from t3,t4 where t3.alpha=t4.alpha and t3.number=t4.number;
quit;
结果如下


对结果去重后也可以进行计算关联率

通过对结果进行分析,发现跟单变量一样,in关键字可以进行一对一及一对多关联率分析,而“=”操作符在一对一和一对多的时候可以进行去重后求关联率,而多对一和多对多的情况则无法使用。

5. 总结

针对一对一和一对多关系来说,使用in关键字求关联率是可行的方法,而“=”操作符无法很好地应用于多对一的关系。

以上为个人浅见,很有可能出现错误及疏漏之处,如发现有错误请联系本人资料中的邮箱,感激不尽。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值