常规操作这边就不讲解了,讲一些比较冷门但是重要的知识点。
1. GROUP BY从句
在SQL语言中,用户可以通过GROUP BY从句来查看分组信息,需要注意的是它一般和汇总函数(summary function)配合使用,常见的汇总函数及其含义如下:
max 最大值
min 最小值
avg 平均值
count 计数(最常用)
nmiss 缺省值个数
range 极差
var 方差
std 标准差
sum 求和(最常用)
例1:计算不同厂商的个数
我们可以想到用count来计算,但是,我们还要注意使用distinct去除重复厂商。
PROC SQL;
select count(distinct make) as number_of_maker from sashelp.cars;
QUIT;
2. HAVING从句
HAVING从句和WHERE从句是类似的,都是来选择满足特定条件的行,不同之处在于:WHERE从句的操作在SELECT从句前,而HAVING从句则是在GROUP BY之后。
下面是一个例子:输出所有厂商的所有型号汽车的售价平均值,并平均值大于20000
PROC SQL;
select make,avg(msrp) as average_price from sashelp.cars
group by make
having average_price >=20000
order by make;
QUIT;
3. 使用SQL对报表加工
SQL对于SAS报表制作也是有一些选项可以给用户使用的,下面主要讲2个:
1)NUMBER|NONUMBER选项
默认情况下,SQL在输出报表的时候不输出行数,但这个选项可以让其显示,其语法结构如下:
PROC SQL NUMBER;
2)OUTOBS和INBOS选项
SQL还可以通过OUTOBS=选项来控制输出的行数,其语法结构如下:
OUTOBS=N,其中N为制定输出行数,而INOBS则是控制读入表的行的数量。
下面用一个例子来对以上的2个选项进行说明,读入sashelp的cars表,然后仅输出不同厂商和汽车型号组合的top10,并加上行数以及相应的标题和脚注。
PROC SQL OUTOBS=10 NUMBER;
title "THE FIRST TEN CAR MODEL IN THE LIST";
select distinct cars.make,cars.model from sashelp.cars;
QUIT;
4. 使用SQL管理表
SQL可以对表进行简单管理,包括创建新表,新增或者删除表、行、更新表中的值等等。
1)复制表
PROC SQL;
create table work.cars_copy as
select * from sashelp.cars;
QUIT;
2)创建空表
PROC SQL;
create table new_class
{
name char(12) label='姓名',
sex char(4) label='性别',
age num label='年龄'
}
;
QUIT;
3)删除表
PROC SQL;
DROP TABLE 表名;
QUIT;
4)插入新行
PROC SQL;
title "NEW_CLASS";
insert into NEW_CLASS
set name='sam',
sex='M',
age='24'
set name='jesscia',
sex='F',
age='23';
title "insert new observations using set";
QUIT;
或者
PROC SQL;
insert into NEW_CLASS (name,sex,age)
values('SAM','M','24')
values('JESSCIA','F','23');
QUIT;
5)删除行
PROC SQL;
DELETE FROM CLASS WHERE (CLASS.HEIGHT)>180;
QUIT;
6)修改表中的列
PROC SQL;
ALTER TABLE 表名
ADD 列1,列2,...
DROP 列1,列2,...
MODIFY 列1,列2,...;
QUIT;
7)更新列的值
PROC SQL;
update class
set height=height*
case
when age in (11,12) then 1.05
when age in (13,14) then 1.06
else 1.04
end;
QUIT;