全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
872 0
2021-07-31

PROC SQL 中set operator学习心得

注:文章大部分内容参考 博客园

1、set 算符

算符 说明
union 从多个查询中产生所有的非重复观测
except 产生只单独属于第一个查询的观测,第二个查询的公共部分就会被排除掉
intersect 产生两个查询中公共部分的观测
outer union 对多个查询结果直接连接

2、基本语法(PROC SQL进行纵向操作)

proc sql;
select *
from table1
set-operator <all> <corr>
select *
from table2
set-operator <all> <corr>
/*可以多个set算符进行叠加*/
select *
from table3;

3、union

  • 当没有all关键字时,合并两个查询的结果,显示连个查询中所有非重复观测,相当于先连接后去重
  • 合并结果与列名无关,仅与位置有关,即若table1有两列(x、y),table2有有两列(x、z),则合并后的表有两列,名称为x与y(先以第一张表的名称来给合并后的表列命名,若第一张表该列无名称则使用第二张表的名称);
  • 默认情况下是要去重的,即两步执行:
    (1)PROC SQL eliminates duplicate (nonunique) rows in the tables.
    (2)PROC SQL selects the rows that meet the criteria and, where requested, overlays columns.
  • 如果加上all关键字,则不会进行第一步,可以提高效率。即all关键字有两个作用:一是阻止去重,二是阻止排序。

4、except(解释all与corr两个关键字的用法,union、intersect用法类似)

使用以下表格进行举例
enter image desc ription here

proc sql;
select * from one
except
select * from two;
quit;
the five remaining rows in table one,the unique rows,are displayed in the output.

enter image desc ription here

单独加上all关键字

proc sql;
select * from one
except all
select * from two;
quit;
  • 不进行unique步,保持原样直接筛选。(省略第一步可以提高效率)。结果如下:
    enter image desc ription here

5、outer union

  • 简单纵向合并,无corr关键字时不会合并列;
  • 有corr关键字时,相同列名的列进行合并;
  • 本身具有all关键字的性质,所以使用all无效。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群