以下將介紹 first.variable 與 last.variable 的應用 , 利用這兩個指令,完成以下三項任務
   (1)歸戶
   (2)定義第幾次就醫記錄
   (3)定義門診就醫三次以上;

*補充說明
first.variable =1 , 根據variable定義第一筆 (通常寫成 first.id)
first.variable =0 , 根據variable定義非第一筆
last.variable =1 , 根據variable定義最後一筆 (通常寫成 last.id)
last.variable =0 , 根據variable定義非最後一筆

必須與 by variable一起寫入程式,以說明定義第一筆與最後一筆的依據是什麼? ;

 

/*以下先產生一個示範資料檔 */

data aa;
        input id $ func_date yymmdd8. /*門診就醫日期*/;
        format func_date yymmdd8.;
cards;
A01 20010108
A01 20010618
A01 20020507
A02 19991211
A02 20001019
A03 20020306
;
proc print;
run; 

 

/* 歸戶*/

 

/*-程式一*/

proc sort data=aa out=bb nodupkey;
        by id;
        proc print;
        run;

 

/*-程式二*/

proc sort data=aa;
        by id func_date;
data bb;
        set aa;
             by id;
                  if first.id;

proc print;
run; 

 

 結果 

                                                                func_
                                            觀測值    id         date

                                               1      A01    01-01-08
                                               2      A02    99-12-11
                                               3      A03    02-03-06

 

 

/* 定義第幾次就醫記錄 */


proc sort data=aa;
        by id;
data bb;
        set aa;
             by id;
                  if first.id then no=0;/*第一筆的 no 起始值是0*/
                     no+1; /* 累進值*/
proc print;
run; 

 

 結果 

                                                             func_
                                         觀測值    id         date    no

                                            1      A01    01-01-08     1
                                            2      A01    01-06-18     2
                                            3      A01    02-05-07     3
                                            4      A02    99-12-11     1
                                            5      A02    00-10-19     2
                                            6      A03    02-03-06     1

 

 

/* 定義門診就醫三次以上 */


proc sort data=aa;
        by id;
data bb;
        set aa;
             by id;
                  if first.id then no=0;
                     no+1;
                  if last.id; /*取每人最後一筆*/
                  if no>=3;/*取就醫次數>=3筆以上*/
proc print;
run; 

 

 結果 
                                         觀測值    id      in_date    no

                                            1      A01    02-05-07     3

 

文章標籤
全站熱搜
創作者介紹
創作者 estat 的頭像
estat

以斯帖統計顧問公司

estat 發表在 痞客邦 留言(1) 人氣(6,256)