SAS中的SQL语句大全.pdf
《SAS中的SQL语句大全.pdf》由会员分享,可在线阅读,更多相关《SAS中的SQL语句大全.pdf(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SAS 中的 SQL 语句完全教程之一:SQL 简介与根本查询功能 本系列全部内容主要以?SQL Processing with the SAS System(Course Notes)?为主进行讲解,本书是在网上下载下来的,但忘了是在哪个网上下的,故不能提供下载链接了,需要的话可以发邮件向我索取,我定期邮给大家,最后声明一下所有资料仅用于学习,不得用于商业目的,否那么后果自负。1 SQL 过程步介绍 1.1 SQL 过程步可以实现以下功能:查询 SAS 数据集、从 SAS 数据集中生成报表、以不同方式实现数据集合并、创立或删除 SAS数据集、视图、索引等、更新已存在的数据集、使得 SAS 系
2、统可以使用 SQL 语句、可以和SAS 的数据步进行替换使用。注意,SQL 过程步并不是用来代替 SAS 数据步,也不是一个客户化的报表工具,而是数据处理用到的查询工具。1.2 SQL 过程步的特征 SQL 过程步并不需要对每一个查询进行重复、每条语句都是单独处理、不需要 print 过程步就能打印出查询结果、也不用 sort 过程步进行排序、不需要 run、要 quit 来结束 SQL 过程步 1.3 SQL 过程步语句 SELECT:查询数据表中的数据 ALTER:增加、删除或修改数据表的列 CREATE:创立一个数据表 DELETE:删除数据表中的列 DESCRIBE:列出数据表的属性
3、DROP:删除数据表、视图或索引 INSERT:对数据表插入数据 RESET:没用过,不知道什么意思 SELECT:选择列进行打印 UPDATE:对已存在的数据集的列的值进行修改 2 SQL 根本查询功能 2.1 SELECT 语句根本语法介绍 SELECT object-item FROM from-list GROUP BY group-by-item ORDER BY order-by-item;这里 SELECT:指定被选择的列 FROM:指定被查询的表名 WHERE:子数据集的条件 GROUP BY:将数据集通过 group 进行分类 HAVING:根据 GROUP BY 的变量得到
4、数据子集 ORDER BY:对数据集进行排序 2.2 SELECT 语句的特征 选择满足条件的数据、数据分组、对数据进行排序、对数据指定格式、一次最多查询 32 个表。这里还要提到的就是,在 SAS 系统中,对于表名和变量名一般不超过 32 个字符,对于库名,文件引用名,格式等不能超过 8 个字符 2.3 Validate 关键字 Validate 关键字只存在于 select 语句中、可以在不运行查询的情况下测试语句的语法、检查列名是否合法、对于不正确的查询将打印其消息。例:1 proc sql;2 validate 3 select Region,Product,Sales 4 from
5、sashelp.shoes 5 where Region=Africa;NOTE:PROC SQL 语句有有效语法。6 quit;此外,我们还可以用 noexec 选项也可以用来进行语法测试。例:7 proc sql noexec;8 select Region,Product,Sales 9 from sashelp.shoes 10 where Region=Africa;NOTE:由于 NOEXEC 选项,未执行语句。11 quit;这里提示未执行,未提示错误,说明该语句没有语法错误。但是如果参加一个 sashelp.shoes表里没有字段,这里就会出现错误,例:12 proc sql
6、noexec;13 select Region,Product,Sales,test 14 from sashelp.shoes 15 where Region=Africa;ERROR:以下这些列在起作用的表中没有找到:test.16 quit;2.4 查询列 我们可以像 2.3 那样查询指定列,也可以用*来查询所有列。例:proc sql;select*from sashelp.shoes;quit;这里我们可以用 feedback 选项来查看到底我们选择了哪些列:17 proc sql feedback;18 select*19 from sashelp.shoes;NOTE:State
7、ment transforms to:select SHOES.Region,SHOES.Product,SHOES.Subsidiary,SHOES.Stores,SHOES.Sales,SHOES.Inventory,SHOES.Returns from SASHELP.SHOES;20 quit;这时,我们可以看到从 sashelp.shoes 表中选择了 8 个列 2.5 消除重复值 我们可以用 distinct 选项来消除重复值。例如,我们要得到没有重复的所有地区的名称:proc sql;select distinct Region from sashelp.shoes quit;2
8、.6 where 子集查询 2.6.1 比拟运算符 先列出 where 语句用到的比拟运算符:LT 大于 EQ =等于 LE =大于或等于 NE =不等于 例如,我们要查询 sales 大于 100000 的所有数据:proc sql;select*from sashelp.shoes where sales100000;quit;2.6.2 in:只要满足 in 里的任意一个值,表达式即为真,例如,我们要选择 Region 在 Africa和 Eastern Europe 的所有数据:proc sql;select*from sashelp.shoes where Region in(Afr
9、ica,Eastern Europe);quit;2.6.3 逻辑运算符 OR|或 AND&是 NOT 非 例如,选择 Region 在 Africa 和 Eastern Europe,且销售额大于 100000 的所有数据:proc sql;select*from sashelp.shoes where Region in(Africa,Eastern Europe)and sales100000;quit;2.6.4 CONTAINS 或?:判断某列是否包含指定字符串 例如,选择列 Region 包含Afr的数据:proc sql;select*from sashelp.shoes whe
10、re Region?Afr;quit;2.6.5 IS NULL 或 IS MISSING:判断某列数据是否为空 例如,如果找出 Region 为空的数据:proc sql;select*from sashelp.shoes where Region is missing;quit;注意,这里我们还可以用以下表达式对 where 语句进行替换。如果 region 为数值型变量,那么可以用 region=.,如果 region 为字符型变量,那么可以用 region=进行替换。2.6.6 Between and:选择某一区间的数据 例如选择 sales 大于 100000,但小于 200000
11、的所有数据:proc sql;select*from sashelp.shoes where sales between 100000 and 200000;quit;2.6.7 like:判断是否能匹配某些字符 例如,选择以 region 以 A 开头的所有地区 proc sql;select*from sashelp.shoes where Region like A%;quit;这里注意有两类通配符,%可以通配任意个任意字符,_只能通配一个任意字符 2.6.8=*:类似匹配 这里由于 sashelp.shoes 里没有符合要求的数据,所有就用书上的例子说明一下吧:Where lastna
12、me=*smith,出来的结果可能是:smith,smythe 等 2.7 表达式 我们可以通过已有的列进行计算来得到新的列,这时用关键词 as 来给新的列赋列名,例如:proc sql;select Region,Product,Sales,Stores,Sales/Stores as salesperstores from sashelp.shoes quit;这时结果就会多一列 salesperstores,用来得到该地区该产品每个商店的平均销售量。这里要注意的是,在创立表达式时,我们还可以在 SQL 里用到 SAS 中的除 LAG 和 DIFF 之外的所有函数。这里我们还可以用表达式计
13、算出来的结果来进行子集查询,但一定要记住用 calculated 关键词。例如我们要找出商店平均销售量大于 5000 的数据:方法一:proc sql;select Region,Product,Sales,Stores,Sales/Stores as salesperstores from sashelp.shoes where Sales/Stores5000;quit;方法二:proc sql;select Region,Product,Sales,Stores,Sales/Stores as salesperstores from sashelp.shoes where calcula
14、ted salesperstores5000;quit;2.8 查询结果展示 2.8.1 order by 数据排序 默认的排序方式是升序,我们可以用 DESC 关键词来进行降序排列。例如以 sales 降序排列数据:proc sql;select*from sashelp.shoes order by Sales DESC;quit;这里提示一下,我们可以用任意多列进行排序,包括表达式结果不用 calculated,但最好是选择的列。2.8.2 LABEL 与 FORMAT LABEL:改变输出变量名的内容 FORMAT:改变列的值的输出方式 例如,改变 salesperstores 的 l
15、abel 和 format proc sql;select Region,Product,Sales,Stores,Sales/Stores as salesperstores label=sales per stores format=dollar12.2 from sashelp.shoes;quit;2.9 处理 SQL 常用函数 MEAN 或 AVG:均值 COUNT 或 N 或 FREQ:非缺失值个数 MAX:最大值 MIN:最小值 NMISS:缺失值个数 STD:标准差 SUM:求和 VAR:方差 2.9.1 求和 sum proc sql;select Region,Produc
16、t,Sales,Stores,sum(Sales,Inventory,Returns)as total from sashelp.shoes;quit;2.9.2 求均值 avg proc sql;select Region,Product,Sales,Stores,avg(Sales)as salesavg from sashelp.shoes;quit;2.9.3 分组求均值 group by proc sql;select Region,avg(Sales)as salesavg from sashelp.shoes group by Region;quit;2.9.4 计数 count
17、 proc sql;select Region,count(*)as count from sashelp.shoes group by Region;quit;2.9.5 HAVING 数据子集 proc sql;select Region,count(*)as count from sashelp.shoes group by Region having count(*)50;quit;其它的就不多作介绍了,多用用就熟悉了 2.10 子查询 2.10.1 找出 regions 平均 sales 大于全部平均 sales 的 region proc sql;select Region,avg
18、(Sales)as salesavg from sashelp.shoes group by Region having avg(Sales)(select avg(Sales)from sashelp.shoes);quit;2.10.2 ANY 关键词介绍 ANY(20,30,40)最终效果:20 ANY(20,30,40)最终效果:40=ANY(20,30,40)最终效果:=20 or=30 or=40 例如,选择出 region 为 united state 的 sales 小于任意 region 为 africa 的 sales 的数据 proc sql;select Region,
19、Sales from sashelp.shoes where Region=United States and SalesALL(20,30,40)最终效果:40 ALL(20,30,40)最终效果:20 例如,选择出 region 为 united state 的 sales 小于所有 region 为 africa 的 sales 的数据 proc sql;select Region,Sales from sashelp.shoes where Region=United States and Sales1 的话,将会出现错误。5.2 回滚 ROLLBACKS 当我们用 INSERT 或
20、UPDATE 的时候,操作要等到发生错误的时候才会停止,这时会出现一个问题,就是数据表的一些数据更新了,而另一些数据没更新,这时如果我们要回到原来的状态,就需要用到 UNDO_POLICY 选项进行回滚。UNDO_POLICY 有三个选项:REQUIRED:缺省选项,取消所有的更新或新插入的数据。这里要注意的是,此操作不一定完全能成功。NONE:阻止所有的与约束不符的更新或新数据 OPTOINAL:取消所有可以成功取消的更新或新插入的数据 本功能用得很少,所以只是翻译一下,请大家查阅相关文献。6 创立视图与索引 6.1 视图 视图最大的好处是它只是一个存储的查询,因此不包含任何数据,这可以减少
21、磁盘的使用空间。其它的功能与数据库的表类似。创立视图语法:Create View View-name as Query-expression;例:proc sql noprint outobs=0;create View delayview as select*from Delay;quit;6.2 索引 语法:Create Index index-name On table-name(column-name,column-name);视图和索引都用得很少,所以这里就不作讲解了,大家查阅相关文献吧。7 维护表 这里主要讲一下如何更新或删除已存在的表的数据,如何对一个表增加、减少、或改变其列的属
22、性,如何删除表、视图和索引。7.1 更新数据 这里主要用 update 来更新表的数据,语法如下 Update table-name Set column-name=expression,Set column-name=expression,Where expression;注意,这里的 where 一定要写清楚,如果没有的话,那么会更新所有的数据。例:proc sql noprint;update delay set delaycat=Delay where delay=0;quit;7.2 条件处理 用 CASE 语句来实现条件处理。例如,对 SASHELP.shoes 根据 sales
23、的大小进行分类:语法:Select column Case When when-condition then result-expression End;例:proc sql;create table shoesrank as select*,(case when sales100000 then good else bad end)as rank from sashelp.shoes;quit;7.3 删除行 语法:Delete from table-name Where expression;例:proc sql;Delete from shoesrank Where Region=Afr
24、ica;quit;7.4 改变列 语法:Alter Table table-name Add column-definition,column-definition,Drop column-name,column-name,Modify column-definition,column-definition,对已存在的数据表增加一个列:例:proc sql;alter table shoesrank add addcolumn num format=comma10.2,addcolumnmore char(10);quit;从已存在的数据表中删除列,例:proc sql;alter table
25、 shoesrank drop addcolumn;quit;修改某列的属性,例:proc sql;alter table shoesrank modify addcolumnmore char(20)label=modify add label;quit;7.5 删除表、视图、索引 语法:Drop Table table-name,table-name,;Drop View View-name,View-name,;Drop Index index-name,index-name,;From table-name;例:proc sql;drop table shoesrank;quit;SA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS 中的 SQL 语句 大全
限制150内