SAS筆記(4) FIRST.和LAST.臨時變量


FIRST.和LAST.臨時變量是SAS很有特色的一點,我在R和Python中暫時沒有發現類似的功能(也許它們也有這個功能,我不知道而已)。考慮這樣一種場景:我們有患者就診的數據,每一條觀測對應一個患者的一次就診記錄,我們知道一個患者可能會多次就醫,那么如何找到這個患者第一次就醫時間以及最有一次就醫時間呢?又或者我們如何確定一個患者是不是因為同一個疾病多次入院。這篇博文將詳細介紹如何利用FIRST.和LAST.這兩個臨時變量解決類似問題。

1.創建FIRST.和LAST.臨時變量

  1. 創建FIRST.和LAST.變量的前提是數據必須是排好序的。利用SORT排序,BY var。
  2. 使用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;

first1

我們發現,對於第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;

first2

 

參考資料:《Longitudinal Data and SAS: A Programmer's Guide》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM