「歸戶」是健保資料庫的資料處理過程中少不了的步驟,因為健保資料不是為學術目的而生成,而是為申請健保費用而存在的,因此資料庫中記載了每一次的就醫日期、就醫診斷、處置與費用等。若我們想知道每一個費用申報年有多少病人就醫?就必須透過「歸戶」的程序將一人多筆的資料轉為一人一筆,即可知每一個費用申報年有多少病人就醫。今天要介紹的是 first.var=1的語法。

[程式一] 以程式寫入1個資料檔aa,放入id(身份證號)birthday(生日)in_date(就醫日期)icd9_cm1(
國際疾病診斷碼)id icd9_cm1為文字型態的欄位;birthday,in_date為日期格式yymmdd10. format birthday in_date yymmdd10.;係指定birthday, in_dateSAS格式是yymmdd10.,這種型式指的是西元年--日,寬度共10個位元(byte)

[
程式二] 若大家有留意,會發現二件事:()資料檔aa中的第一筆資料非idA01患者的第一筆就醫日期,()A01的第4筆出生日期與前3筆不同,若研究者想取每人的一筆資料,而且是每一個費用申報年的第一筆,資料就必須利用SORT指令先將id, birthday, in_date排序。為什麼要加入birthday?因為國人的戶政會出現不同的人擁有相同id的情況,因此認定資料是否為同一人的條件必須同時加入idbirthday。再加入in_date的目的,是為了讓入院日期由前排到後。接下來,利用DATA指令產生新的檔bb,且由SET指令讀取檔案aaby id birthday; 這段程式說明以下的擷取第一筆的動作,要以id, birthday辨別哪幾筆是同一人的資料。 if (first.id=1 & first.birthday=1) | (first.id=0 & first.birthday=1);這段程式是歸戶的主要動作,簡略地表達,可以將左式改為IF A | B; A=(first.id=1 & first.birthday=1),意即先取每人的idbirthday的第一筆;B=(first.id=0 & first.birthday=1),即在相同的id中,若id不是第一筆,但birthday第一次出現,要取出來。如此即完成擷取每人的第一筆資料的歸戶動作,檔案aa中包含3個人的資料,您的程式寫對了嗎?([結果])

大家練習看看,若要依每一個就醫年度去擷取每人的第一筆,歸戶程式該如何寫?

[
程式一];

data aa;
input id $ birthday yymmdd10. in_date yymmdd10. icd9_cm1 $;
format birthday in_date yymmdd10.;
cards;
A01 1956-02-032006-10-12 493 
A01 1956-02-032006-03-10 25090 
A01 1956-02-032007-01-23 4870 
A01 1973-08-052007-01-31 4910 
B01 1977-11-302008-02-15 5990 
B01 1977-11-302008-03-24 7805 
;
proc print;
run;

[
程式二];
proc sort data=aa;
by id birthday in_date;
data bb;
set aa;
by id birthday;
if (first.id=1 & first.birthday=1) | (first.id=0 & first.birthday=1);
proc print;
run;

[
結果]

Obs id birthday in_date icd9_cm1

1 A01 1956-02-03 2006-03-10 25090
2 A01 1973-08-05 2007-01-31 4910
3 B01 1977-11-30 2008-02-15 5990

arrow
arrow

    estat 發表在 痞客邦 留言(0) 人氣()