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用法类似)
使用以下表格进行举例

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.

单独加上all关键字
proc sql;
select * from one
except all
select * from two;
quit;
- 不进行unique步,保持原样直接筛选。(省略第一步可以提高效率)。结果如下:

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