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

1. 关联率是什么

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

2. 创建测试用表

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

如何用sas的proc sql过程求数据集的关联率_第1张图片如何用sas的proc sql过程求数据集的关联率_第2张图片如何用sas的proc sql过程求数据集的关联率_第3张图片

上图分别为表 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;

结果如下

如何用sas的proc sql过程求数据集的关联率_第4张图片

由此看出,最接近我们需要的结果是第二种和第四种“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;
结果如下

如何用sas的proc sql过程求数据集的关联率_第5张图片

正常情况下,表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关键字求关联率是可行的方法,而“=”操作符无法很好地应用于多对一的关系。

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





你可能感兴趣的:(算法,sas,SQL)