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