首页 > 代码库 > 【SAS ADVANCE】通过COUNT函数实现counting values及HAVING子句

【SAS ADVANCE】通过COUNT函数实现counting values及HAVING子句

一、 COUNT函数
         在实际统计应用中,需要计算观测值出现的次数,这项功能可以通过COUNT函数来实现,它有下面三种形式和功能:
form you used 返回值 例子
COUNT(*) 整个表或组的行数   select count(*) as Count
COUNT(column) 当参数中所选定的列没有缺失值时,输出表或者组中该变量的行数   select count(jobcode) as Count
COUNT(DISTINCT column) 该列中distinct values的行数   select count(distinct jobcode) as Count
 

【备注】:

    1. COUNT summary function仅仅count非缺失值,而忽略缺失值。若用户需要计入缺失值,则考虑NMISS函数;

    2. COUNT summary function是唯一一个允许用户使用星号(*)作为参数的summary函数;

    3. 若在PROC SQL后面加上GROUP BY子句,则输出每一个group的行数;

    4. 若COUNT指定的参数列中含有缺失值,PROC SQL会将缺失值看作是一类,这可能导致unexpected results.

 

二、HAVING子句

          在前面我们已经展示了如何通过GROUP BY子句来group数据,例如下面这个例子,这个例子输出一个16行、两列的table,即每一类job code的组内salary平均值。

proc sql;    select jobcode,              avg(salary) as AvgSalary  format=dollar11.2        from sasuser.payrollmaster       group by jobcode;

        

【SUPPOSE】

       用户想要select only a subset of groups for your query output,也就是说通过一个条件分别筛选每组的数据来输出,这就可以通过在GOURP BY后面加上一个HAVING子句来实现。实际上,HAVING子句的功能与WHERE子句的功能类似,但是WHERE子句只能用于individual rows,而不能放在GROUP BY后面。例如:

proc sql;    select jobcode,              avg(salary) as AvgSalary format=dollar11.2     from sasuser.payrollmaster    group by jobcode    having avg(salary)>56000;

【备注】 若用户省去GROUP BY子句,而query code中包含HAVING子句,则HAVING子句和summary函数将整个表看做是一个group,功能与where子句一样。