SAS中的SQL语句大全Word格式文档下载.docx
《SAS中的SQL语句大全Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SAS中的SQL语句大全Word格式文档下载.docx(42页珍藏版)》请在冰豆网上搜索。
FROMfrom-list
<
WHEREsql-expression>
GROUPBYgroup-by-item<
...group-by-item>
>
HAVINGsql-expression>
ORDERBYorder-by-item<
...order-by-item>
;
这里SELECT:
指定被选择的列
FROM:
指定被查询的表名
WHERE:
子数据集的条件
GROUPBY:
将数据集通过group进行分类
HAVING:
根据GROUPBY的变量得到数据子集
ORDERBY:
对数据集进行排序
2.2SELECT语句的特征
选择满足条件的数据、数据分组、对数据进行排序、对数据指定格式、一次最多查询32个表。
这里还要提到的就是,在SAS系统中,对于表名和变量名一般不超过32个字符,对于库名,文件引用名,格式等不能超过8个字符
2.3Validate关键字
Validate关键字只存在于select语句中、可以在不运行查询的情况下测试语句的语法、检查列名是否合法、对于不正确的查询将打印其消息。
例:
1
procsql;
2
validate
3
selectRegion,Product,Sales
4
fromsashelp.shoes
5
whereRegion='
Africa'
NOTE:
PROCSQL语句有有效语法。
6
quit;
此外,我们还可以用noexec选项也可以用来进行语法测试。
7
procsqlnoexec;
8
selectRegion,Product,Sales
9
10
whereRegion='
由于NOEXEC选项,未执行语句。
11
这里提示未执行,未提示错误,说明该语句没有语法错误。
但是如果加入一个sashelp.shoes表里没有字段,这里就会出现错误,例:
12
13
selectRegion,Product,Sales,test
14
15
ERROR:
以下这些列在起作用的表中没有找到:
test.
16
2.4查询列
我们可以像2.3那样查询指定列,也可以用*来查询所有列。
procsql;
select*
fromsashelp.shoes;
quit;
这里我们可以用feedback选项来查看到底我们选择了哪些列:
17
procsqlfeedback;
18
19
Statementtransformsto:
selectSHOES.Region,SHOES.Product,SHOES.Subsidiary,SHOES.Stores,SHOES.Sales,SHOES.Inventory,SHOES.Returns
fromSASHELP.SHOES;
20
这时,我们可以看到从sashelp.shoes表中选择了8个列
2.5消除重复值
我们可以用distinct选项来消除重复值。
例如,我们要得到没有重复的所有地区的名称:
selectdistinctRegion
2.6where子集查询
2.6.1比较运算符
先列出where语句用到的比较运算符:
LT
<
小于
GT
>
大于
EQ
=
等于
LE
=
小于或等于
GE
大于或等于
NE
^=
不等于
例如,我们要查询sales大于100000的所有数据:
wheresales>
100000;
2.6.2in:
只要满足in里的任意一个值,表达式即为真,例如,我们要选择Region在Africa和EasternEurope的所有数据:
whereRegionin('
'
EasternEurope'
);
2.6.3逻辑运算符
OR
|
或
AND
&
是
NOT
^
非
例如,选择Region在Africa和EasternEurope,且销售额大于100000的所有数据:
)and
sales>
2.6.4CONTAINS或?
:
判断某列是否包含指定字符串
例如,选择列Region包含’Afr’的数据:
whereRegion?
'
Afr'
2.6.5ISNULL或ISMISSING:
判断某列数据是否为空
例如,如果找出Region为空的数据:
whereRegionismissing;
注意,这里我们还可以用以下表达式对where语句进行替换。
如果region为数值型变量,则可以用region=.,如果region为字符型变量,则可以用region=‘’进行替换。
2.6.6Betweenand:
选择某一区间的数据
例如选择sales大于100000,但小于200000的所有数据:
wheresalesbetween100000and200000;
2.6.7like:
判断是否能匹配某些字符
例如,选择以region以A开头的所有地区
whereRegionlike'
A%'
这里注意有两类通配符,‘%’可以通配任意个任意字符,‘_’只能通配一个任意字符
2.6.8=*:
类似匹配
这里由于sashelp.shoes里没有符合要求的数据,所有就用书上的例子说明一下吧:
Wherelastname=*‘smith’,出来的结果可能是:
smith,smythe等
2.7表达式
我们可以通过已有的列进行计算来得到新的列,这时用关键词as来给新的列赋列名,例如:
selectRegion,Product,Sales,Stores,Sales/Storesassalesperstores
这时结果就会多一列salesperstores,用来得到该地区该产品每个商店的平均销售量。
这里要注意的是,在创建表达式时,我们还可以在SQL里用到SAS中的除LAG和DIFF之外的所有函数。
这里我们还可以用表达式计算出来的结果来进行子集查询,但一定要记住用calculated关键词。
例如我们要找出商店平均销售量大于5000的数据:
方法一:
whereSales/Stores>
5000;
方法二:
wherecalculatedsalesperstores>
2.8查询结果展示
2.8.1orderby数据排序
默认的排序方式是升序,我们可以用DESC关键词来进行降序排列。
例如以sales降序排列数据:
orderbySalesDESC;
这里提示一下,我们可以用任意多列进行排序,包括表达式结果(不用calculated),但最好是选择的列。
2.8.2LABEL与FORMAT
LABEL:
改变输出变量名的内容
FORMAT:
改变列的值的输出方式
例如,改变salesperstores的label和format
selectRegion,Product,Sales,Stores,
Sales/Storesassalesperstores
label='
salesperstores'
format=dollar12.2
2.9处理SQL常用函数
MEAN或AVG:
均值
COUNT或N或FREQ:
非缺失值个数
MAX:
最大值
MIN:
最小值
NMISS:
缺失值个数
STD:
标准差
SUM:
求和
VAR:
方差
2.9.1求和sum
sum(Sales,Inventory,Returns)astotal
2.9.2求均值avg
avg(Sales)assalesavg
2.9.3分组求均值groupby
selectRegion,
groupbyRegion;
2.9.4计数count
selectRegion,count(*)ascount
2.9.5HAVING数据子集
groupbyRegion
havingcount(*)>
50;
其它的就不多作介绍了,多用用就熟悉了
2.10子查询
2.10.1找出regions平均sales大于全部平均sales的region
havingavg(Sales)>
(selectavg(Sales)fromsashelp.shoes);
2.10.2ANY关键词介绍
ANY(20,30,40)
最终效果:
20
40
=ANY(20,30,40)
=20or=30or=40
例如,选择出region为unitedstate的sales小于任意region为africa的sales的数据
selectRegion,Sales
whereRegion='
UnitedStates'
andSales<
any
(selectSalesfromsashelp.shoeswhereRegion='
这个例子没有多少意义,只是说明一下any的用法
2.10.3ALL关键词介绍
ALL(20,30,40)
例如,选择出region为unitedstate的sales小于所有region为africa的sales的数据
all
2.10.4EXISTS与NOTEXISTS
where
exists
(select*fromsashelp.orsales);
SAS中的SQL语句完全教程之二:
数据合并与建表、建视图
数据合并与建表、建视图索引等
1连接joins分为内连接innerjoins和外连接outerjoins
内连接:
仅返回匹配的数据,最多可以有32个表同时进行内连接
外连接:
返回所有匹配的数据和非匹配的数据,一次只能有两个表或视图进行外连接
迪卡尔积:
返回表内所有可能的匹配情况。
例如表A有10*20的数据,表B有30*40的数据,则两个表的迪卡尔积有(10+30)*(20+40)=40*60的数据
我们先建立两个数据集:
datamarch;
inputflight$3.+5datedate7.+3departtime5.+2orig$3.
+3dest$3.
+7miles+6boarded+6capacity;
formatdatedate7.departtime5.;
informatdatedate7.departtime5.;
cards;
219
01MAR94
9:
31
LGA
LON
3442
198
250
622
12:
FRA
3857
207
132
15:
35
YYZ
366
115
178
271
13:
PAR
3635
138
302
20:
22
WAS
229
105
180
114
02MAR94
7:
10
LAX
2475
119
210
202
10:
43
ORD
740
120
147
106
03MAR94
118
03MAR94
197
180
04MAR94
148
232
137
117
146
250
05MAR94
104
160
185
157
177
06MAR94
128
163
150
66
07MAR94
160
164
155
135
run;