1.简单查询:
PROC SQL; SELECT 列名1, 列名2,… FROM 数据集 WHERE 条件; RUN;
2.使用order by排序:
PROC SQL; SELECT 列名1, 列名2,… FROM 数据集 where 条件 ORDER BY 列名 DESC ; RUN;
(升序关键词:ASC;降序关键词:DESC)
3.连接查询:
ON后面的条件(ON条件)和WHERE条件的区别:
ON条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。
WHERE条件:在有ON条件的SELECT语句中是过滤中间表的约束条件;在没有ON的单表查询中,是限制物理表或者中间查询结果返回记录的约束;在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。
(只进行连接操作,WHERE只过滤中间表的记录)
连接运算符是用来实现多表联合查询的一种重要方式,主要分为三种:内连接、外连接、交叉连接。
3.1 内连接 INNER JOIN
内连接(INNER JOIN)有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。
内连接使用比较运算符(包括=、>、<、<>、>=、<=、!> 和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据所使用的比较方式不同,内连接分为等值连接、自然连接和自连接三种。
语句1:隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积。
PROC SQL; INSERT INTO 新表名 (列名1,…,列名n) SELECT 列名1,…,列名n FROM 旧表 WHERE 条件; RUN;
语句2:显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。
PROC SQL; SELECT 表1.列名1,表1.列名2,表2.列名1,表2.列名2 FROM 表1,表2 WHERE 表1.列名1=表2.列名1; RUN;
eg:PROC SQL;SELECT A.*,B.* FROM A INNER JOIN B ON A.ID=B.PARENT_ID;RUN;(使用“=”关系将表连接起来的查询,其查询结果中列出被连接表中所有的列,包括其中的重复列)
4.查询结果放入一个新表中
若表已存在:
PROC SQL; INSERT INTO 新表名 (列名1,…,列名n) SELECT 列名1,…,列名n FROM 旧表 WHERE 条件; RUN;
若表不存在:
PROC SQL; SELECT 表1.列名1,表1.列名2,表2.列名1,表2.列名2 FROM 表1,表2 WHERE 表1.列名1=表2.列名1; RUN;
PS:PROC过程步中不能使用sql server的into将结果放入新表中,因为sas会认为用户想要创建宏变量!
参考:1.https://www.cnblogs.com/arxive/p/10046556.html;2.http://blog.sina.com.cn/s/blog_6cbb9e310100wckd.html