目录

一、GROUP BY语句

1、功能:

2、注意:

3、汇总函数:

4、COUNT函数:

5、提高查询输出LABEL、FORMAT:

二、ORDER BY语句

1、功能:

2、注意:


一、GROUP BY语句

1、功能:

按组处理数据

2、注意:

  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:对第四列和第二列的值进行排序)。