本篇應該是SAS PROC SQL的入門吧?哈~ ╯﹏╰
這在裡不會產生新的資料(Data),只介紹直接在報表中呈現結果,往下看就可以理解了。
PS:此篇 SQL入門介紹,在2008年就寫好了,有點不確定當初寫這一篇的目的,不過寫都寫了,就與大家分享 ^.^。
PROC SQL指令介紹: PROC SQL常用的指令表列
PROC SQL 選項 ; CREATE 表格名稱 AS SELECT 變項(直行) FROM 表格名稱(資料檔名稱) WHERE 條件 GROUP BY變項 HAVING條件 ORDER BY 變項 ; QUIT ; |
在開始之前:
在開始之前需要建立一個範例資料檔。
DATA Heart ; SET Sashelp.Heart (obs=20); Height=Height*2.54; Weight=Weight*0.454; KEEP Status Sex AgeAtStart Height Weight Diastolic Systolic Smoking; run; |
入門的第一步:
第一步為列出特定資料檔中所有變項的值,如同PROC PRINT一般。
在SELECT後面加「星號」,代表需要列出選取資料檔所有的變項(直行)的資料。而FROM為表示要由那個「表格(Table)」或習慣稱為「資料檔(Data)」抓取所需的資料,結果列於《圖01》。
PROC SQL; SELECT * FROM Heart; QUIT; | 《圖01》 |
只選取部分變項:
如同RPCO PRINT可以透過VAR指令只選出想要表列的結果,在PROC SQL語法中,只要於SELECT後面敘述想呈現的變項即可,例如只選取Height和Weight。結果於《圖02》。
PROC SQL; SELECT Height, Weight FROM Heart; QUIT; | 《圖02》 |
建立新變項 (基本方法) …01:
在原本DATA step函數除了幾個特殊的函數外(DIFF、LAG等),大多數均可以在PROC SQL指令中使用,在SELECT敘述後直接針對變項做運算或使用函數可建立新的變項,例如建立『Height/100』,如果無在新變項後面使用AS這個指令,新變項將會無變項名稱。結果如《圖03》。
PROC SQL; SELECT Height/100 , Weight/(Height/100)**2 AS BMI FROM Heart; QUIT; | 《圖03》 |
建立新變項 (CALCULATED指令)…02:
在上面的例子中可以發現,在計算BMI時『Height/100』似乎被重複使用到了,雖然在新的程式中將『Height/100』命為『Height_m』,但我們還不能馬上使用此新變項,除非在新變項前面增加CALCULATED指令,結果於《圖04》。(用法:CALCULATED 新變項)
PROC SQL; SELECT Height/100 AS Height_m , Weight/ (CALCULATED Height_m**2) AS BMI FROM Heart; QUIT; | 《圖04》 |
建立新變項 (變項分組)…03:
在建立資料的時候,依據條件將變項重新分組,是常見到的過程,在DATA step中我們會使用IF…THEN…ELSE將變項重新分組,類似的指令在PROC SQL中使用的是下列的指令。
CASE WHEN 條件1 THEN 結果1 WHEN 條件2 THEN 結果2 ELSE結果 END AS 新變項 |
PROC SQL; SELECT ID,Height, CASE WHEN 0<=Height<160 THEN 1 WHEN Height<170 THEN 2 WHEN Height>=170 THEN 3 ELSE . END AS Height_gr FROM Heart; QUIT; | 《圖05》 |
只呈現符合特定條件的資料:
在呈現資料的時候,可能只想呈現年齡≦35歲的資料,這時WHERE指令即可達到我們的目的,結果於《圖06》。
PROC SQL; SELECT * FROM Heart WHERE AgeAtStart<=35; QUIT; | 《圖06》 |
計算分組變項的統計量:
如果要計算分組統計量我們除了使用PROC MEANS程序外,在PROC SQL程序中,可以使用GROUP BY這個指令,及在SELECT指令中配合計算統計量的函數(例如:MEAN、STD、COUNT、MAX、MIN、NMISS、STD、SUM和VAR),可達到類似的結果。在以下程式中,產生了年齡分群的變項「age_gr」,此變項將年齡分為<40和>=40兩組,然後將「age_gr」變項置於GROUP BY後面,即可依據年齡分群的結果計算統計量,其結果如《圖07》。
如果您覺得這篇文章對您有幫助,文章旁的廣告您也剛好有興趣,請幫忙點擊廣告,讓我多一點寫下去的動力。感謝您的幫忙!
參考文章:
1. Katie Minten Ronk, Steve First, David Beam. An Introduction To PROC SQL. SUGI 27.
2. Kirsty Lauderdale. PROC SQL - The Dark Side of SAS? SAS Global Forum 2007.
如有誤請指教。轉載請註明來源。
系列文章:
您好:我是sas剛入門新手,想請教您,我在做垂直合併時,發生有個變數類別訂不同(一個number 一個文字),出現error,請問這應該如何處理?謝謝
回覆刪除我有試著先把A檔的變數改為文字,用length,但還是不行,我的程式碼如下 A檔變數a1是number
Data temp;
Set A;
Iength a1 $ 12;
Run;
用看看input()字符轉數值或是put()數值轉字符,格式一樣後再來merge(記得用來merge的變量要先sort排序過喔)~
回覆刪除merge 使用proc sql就不用sort了~
回覆刪除