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关键字求关联率是可行的方法,而“=”操作符无法很好地应用于多对一的关系。
以上为个人浅见,很有可能出现错误及疏漏之处,如发现有错误请联系本人资料中的邮箱,感激不尽。