一、 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子句一样。