目录
一、GROUP BY语句
1、功能:
2、注意:
3、汇总函数:
4、COUNT函数:
5、提高查询输出LABEL、FORMAT:
二、ORDER BY语句
1、功能:
2、注意:
一、GROUP BY语句
1、功能:
按组处理数据
2、注意:
- 根据一列或多列的值将数据分组,多列用逗号分隔。
- 在SELECT中的列如果没有使用汇总函数,则转变为ORDER BY语句。
3、汇总函数:
常用汇总函数:avg,count,max,min,range等
注意:
- 汇总函数参数个数:
一个参数,没有group by时,对所有观测进行计算,有则按照group by的分类计算
select sum(boarded),sum(transferred),sum(nonrevenue) as Total
from sasuser.marchflights;
quit;
多个参数,计算当前观测
select sum(boarded,transferred,nonrevenue) as Total
from sasuser.marchflights;
quit;
- 是否有GROUP BY语句
Group by存在:汇总函数应用于整个表
proc sql;
select jobcode, avg(salary) as AvgSalary
from sasuser.payrollmaster;
quit;
Group by不存在:汇总函数应用于groupby的每个组
proc sql;
select jobcode, avg(salary) as AvgSalary
from sasuser.payrollmaster
group by jobcode;
quit;
- WHERE语句是否是否只包含了select与剧中指定的列
- SELECT语句中如果指定了汇总函数,是否还存在其他列
除汇总函数外,没有其他列:计算所有观测,则就一个值。
proc sql;
select avg(salary) as AvgSalary
from sasuser.payrollmaster;
quit;
除汇总函数外,有其他列:按组计算观测
由于EmpId、dateofhire没有分组也没有计算,所以全部显示。汇总函数的列则将计算后的值重复输出
proc sql;
select EmpId, jobcode,dateofhire, avg(salary) as AvgSalary
from sasuser.payrollmaster
group by jobcode;
quit;
除汇总函数,且只有一个参数,还有其他变量,GROUP BY 语句按该变量分类——按该分类计算,将计算结果放入每一个分类中。
PROC SQL OUTOBS=10;
SELECT jobcode,avg(salary) as avgsalary format=dollar11.2
FROM sasuser.payrollmaster
GROUP BY jobcode;
QUIT;
4、COUNT函数:
功能:记录非缺失值个数。
注意:
- GROUP BY某个变量,如果这个变量有缺失值,则缺失值为一组
- count(*),输出表中有多少行
count(variable),输出variable的非缺失值有多少行。
count(distinct variable),输出variable的唯一值有多少个 - NMISS(num_variable):num_variable缺失值个数
CMISS(char_variable):char_variable缺失值个数
proc sql;
select substr(jobcode,1,2) label='Job Category', count(*) as Count
from sasuser.payrollmaster
group by 1;
quit;
- DISTINCT
PROC SQL OUTOBS=10;
SELECT DISTINCT flightnumber,destination
FROM sasuser.internationalflights
ORDER BY 1;
QUIT;
5、提高查询输出LABEL、FORMAT:
PROC SQL OUTOBS=15;
TITLE 'Current Bonus Infomation';
TITLE2 'Employees with Salaries > $75,000';
SELECT empid LABEL='Employee ID',
jobcode LABEL='Job Code',
salary,
salary * .10 AS Bonus /*如果不使用AS则该列列名为空*/
format=dollar12.2
FROM sasuser.payrollmaster
WHERE salary>75000
ORDER BY salary DESC;
QUIT;
二、ORDER BY语句
1、功能:
指定行的顺序
2、注意:
- 多个列名用逗号分隔,第一个列为主排序顺序。
- 默认排序为升序,在列名后加关键字DESC,指定为降序。
- proc sql 先对缺失值进行排序,所有在升序时,缺失值首先出现在查询结果中
- 该排序不会更改原表中行的顺序。
- 可以根据列在select语句中的位置,对列进行排序(order by 4,2:对第四列和第二列的值进行排序)。