以下將介紹 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

請問 就醫記錄 同一個人同一天被記錄2次(診斷有特定疾病),這樣應該算1次門診嗎? (因為其他變數原因如申報日期..等,會出現此情況) 因為若遇到研究樣本定義為 確定被診斷xxx病,>=3次的人,是依照紀錄>=3,還是不同的就醫日期達3次?