设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1639|回复: 0

SAS中的sql语句的使用-多表使用

[复制链接]

38

主题

328

金钱

536

积分

初级用户

发表于 2019-7-4 15:06:05 | 显示全部楼层 |阅读模式

SAS 中的多表使用一般为多表之间的连接查询
连接查询分为:

(1)表内连接
(2)表与表之间的连接

这里我们只讨论表与表之间的连接,而表与表之间的连接分为:

(1)全连接
  这里的全连接就是基本的笛卡尔积,笛卡尔积通俗一点说就是每条数据的交叉相乘,使用full join

  1. data temp;
  2. input visit $ visit_dat $ age type $;
  3. cards;
  4. v1 20190201 18 a
  5. v2 20200304 21 f
  6. v3 20190825 34 e
  7. v1 20180431 58 c
  8. v2 20170902 23 d
  9. v4 20160826 25 r
  10. ;
  11. run;

  12. data temp2;
  13. input visit $ visit_dat $ age type $;
  14. cards;
  15. v3 20190725 25 d
  16. v4 20200431 35 e
  17. v5 20190921 38 g
  18. ;
  19. run;

  20. /* 创建表,含条件语句 */
  21. proc sql;
  22. create table join_visit as
  23. select
  24.     table1.visit as visit1,
  25.     table1.visit_dat as visit_dat1,
  26.     table1.age as age1,
  27.     table1.type as type1,
  28.     table2.visit as visit1,
  29.     table2.visit_dat as visit_dat2,
  30.     table2.age as age2,
  31.     table2.type as type2
  32. from
  33.     work.temp as table1
  34. full join
  35.     work.temp2 as table2
  36. on
  37.     table1.visit = table2.visit;
  38. run;

  39. /* 打印创建的表 */
  40. proc print data=join_visit;
  41. run;
复制代码


结果为:
1.png

(2)左外连接
  保留左边的所有数据,对于右边的,只保留符合条件的数据,使用 left join
  1. data temp;
  2. input visit $ visit_dat $ age type $;
  3. cards;
  4. v1 20190201 18 a
  5. v2 20200304 21 f
  6. v3 20190825 34 e
  7. v1 20180431 58 c
  8. v2 20170902 23 d
  9. v4 20160826 25 r
  10. ;
  11. run;

  12. data temp2;
  13. input visit $ visit_dat $ age type $;
  14. cards;
  15. v3 20190725 25 d
  16. v4 20200431 35 e
  17. v5 20190921 38 g
  18. ;
  19. run;

  20. /* 创建表,含条件语句 */
  21. proc sql;
  22. create table join_visit as
  23. select
  24.     table1.visit as visit1,
  25.     table1.visit_dat as visit_dat1,
  26.     table1.age as age1,
  27.     table1.type as type1,
  28.     table2.visit as visit1,
  29.     table2.visit_dat as visit_dat2,
  30.     table2.age as age2,
  31.     table2.type as type2
  32. from
  33.     work.temp as table1
  34. left join
  35.     work.temp2 as table2
  36. on
  37.     table1.visit = table2.visit;
  38. run;

  39. /* 打印创建的表 */
  40. proc print data=join_visit;
  41. run;
复制代码

2.png

(3)右外连接
  保留右边的所有数据,对于左边的,只保留符合条件的数据,使用 right join
  1. data temp;
  2. input visit $ visit_dat $ age type $;
  3. cards;
  4. v1 20190201 18 a
  5. v2 20200304 21 f
  6. v3 20190825 34 e
  7. v1 20180431 58 c
  8. v2 20170902 23 d
  9. v4 20160826 25 r
  10. ;
  11. run;

  12. data temp2;
  13. input visit $ visit_dat $ age type $;
  14. cards;
  15. v3 20190725 25 d
  16. v4 20200431 35 e
  17. v5 20190921 38 g
  18. ;
  19. run;

  20. /* 创建表,含条件语句 */
  21. proc sql;
  22. create table join_visit as
  23. select
  24.     table1.visit as visit1,
  25.     table1.visit_dat as visit_dat1,
  26.     table1.age as age1,
  27.     table1.type as type1,
  28.     table2.visit as visit1,
  29.     table2.visit_dat as visit_dat2,
  30.     table2.age as age2,
  31.     table2.type as type2
  32. from
  33.     work.temp as table1
  34. right join
  35.     work.temp2 as table2
  36. on
  37.     table1.visit = table2.visit;
  38. run;

  39. /* 打印创建的表 */
  40. proc print data=join_visit;
  41. run;
复制代码


结果为:
3.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

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