FIRST.和LAST.臨時變量是SAS很有特色的一點,我在R和Python中暫時沒有發現類似的功能(也許它們也有這個功能,我不知道而已)。考慮這樣一種場景:我們有患者就診的數據,每一條觀測對應一個患者的一次就診記錄,我們知道一個患者可能會多次就醫,那么如何找到這個患者第一次就醫時間以及最有一次就醫時間呢?又或者我們如何確定一個患者是不是因為同一個疾病多次入院。這篇博文將詳細介紹如何利用FIRST.和LAST.這兩個臨時變量解決類似問題。
1.創建FIRST.和LAST.臨時變量
- 創建FIRST.和LAST.變量的前提是數據必須是排好序的。利用SORT排序,BY var。
- 使用SET復制已排好序的數據,用BY語句創建FIRST.和LAST.,BY的對象是第一步排序的變量 var。
***創建數據 DATA ONE; INPUT SUBJECT SCORE; DATALINES; 1 11 2 21 3 31 1 12 4 41 1 13 2 22 4 42 4 43 ; ***1.對數據進行排序 PROC SORT DATA=ONE; BY SUBJECT; RUN; ***2.創建FIRST. 和LAST. 臨時變量 DATA TWO; SET ONE; BY SUBJECT; FIRST = FIRST.SUBJECT; LAST = LAST.SUBJECT; RUN; PROC PRINT DATA=TWO; TITLE "Demonstrating FIRST. and LAST. Variables"; RUN;
我們發現,對於第3個subject,他的FIRST.和LAST.都為1,說明這個患者只去過一次醫院。這里需要注意的是,對於BY語句后面的每一個變量,都會有一個對應的FIRST.和LAST.臨時變量,並且這些臨時變量不會輸出在數據集中。
2. 使用多個BY 變量
DATA THREE; INFORMAT GENDER GROUP $1.; INPUT GENDER GROUP SCORE; DATALINES; M A 23 M A 24 M B 33 M B 35 M B 36 F A 41 F A 42 F A 43 F B 51 ; PROC SORT DATA=THREE; BY GENDER GROUP; RUN; DATA FOUR; SET THREE; BY GENDER GROUP; FIRST_GENDER = FIRST.GENDER; LAST_GENDER = LAST.GENDER; FIRST_GROUP = FIRST.GROUP; LAST_GROUP = LAST.GROUP; PROC PRINT DATA=FOUR; TITLE "Listing of Data Set FOUR"; RUN;
3. 應用
用FIRST.和LAST.計算每個患者的就醫次數
PROC SORT DATA=ONE; BY SUBJECT; RUN; DATA COUNT; SET ONE; BY SUBJECT; IF FIRST.SUBJECT THEN NUMBER = 0; NUMBER + 1; IF LAST.SUBJECT THEN OUTPUT; KEEP SUBJECT NUMBER; RUN;
***將每個患者的就醫次數放入原始數據
DATA COMBINE;
MERGE ONE COUNT;
BY SUBJECT;
RUN;