本篇主要介紹Summary Functions在SQL中的使用。
Summary Functions可以用來計算所有資料筆的函數,類似Proc Means的功能,但依據寫法也可能會如一般函數的結果。
常用的Summary Functions有Mean、Count、Max、Min等,其餘函數表列於下:
建立資料檔:
慣例,請先建立一個資料檔。
data score1;
input id score class $ @@;
datalines;
1 80 A
2 90 A
3 75 A
4 67 A
5 77 B
6 91 B
7 67 B
;
run;
Summary Functions(1):
依據Summary Functions在select語法中所放入的狀況,可分為「只有Summary Functions的指令」及「包含其他非Summary Functions的指令」,有點難理解的兩句話,先來看「只有Summary Functions的變項」的結果。
【程式1】 proc sql; | proc sql; |
不論是【程式1】左欄或右欄的程式,在select之後均只有放入包含Summary Functions的指令,因此結果依據score1資料檔中的7筆資料進行計算,得到平均分數為78.1分,最小的為67分。
接下來看「包含其他非Summary Functions的指令」的結果,於【程式2】
【程式2】 proc sql; | proc means data=score1 noprint ; data test1; |
【程式2】左欄加入了三個非Summary Functions的指令,分別為id, score,class,SQL如實將三個變項的結果列出,而後面兩個Summary Functions的指令則帶入全體的計算後的結果,也就是【程式1】的結果。如果要用傳統Data Step完成同樣工作所需要的語法則在【程式2】右欄。
Summary Functions(2):
Summary Functions和一般函數(Base SAS Functions)寫法相同,例如mean、min、max等,因此在撰寫程式時容易讓分析師困擾。例如在Summary Functions後是用多個參數時,結果會針對每觀察值數值作運算,也就是Summary Functions會和一般函數運算方式一樣。
【程式3】
proc sql; | proc sql; |
【程式3】左欄,mean函數中使用了兩個參數,得到結果不是7筆資料的平均,而是各觀察值的結果(以第1筆為例,計算過成為(80+(80+10))/2=85)。【程式3】左欄,mean函數外面在使用另一個mean函數,結果又回到7筆資料的平均,當然這不是原始資料的平均,而是mean(score, score+10) 後的平均值。
這次簡單介紹了Summary Functions,後續將持續介紹PROC SQL的重要指令,包括group by、order by、having等。
系列文章: