Re: [程式] SAS計算住院檔人年

看板Statistics作者 ( ￾ ￾ )時間6年前 (2019/04/20 02:34), 編輯推噓2(202)
留言4則, 2人參與, 6年前最新討論串1/1
你對健保資料庫的了解可能不太夠, 光用 in_date 跟 out_date 不能視為該次住院的期間。 醫院每個月申報一次, 因此住超過一個月的資料會有 in_date 但沒有 out_date (病人還沒出院,醫院申報當下不知道該病患的出院日) 跨月的資料要搭配申報起訖日 appl_b 跟 appl_e 來看才準確。 PS:若該次住院都在同一個月,就不會有 appl_b 跟 appl_e 了 舉例而言, 若有人 2006/1/1 住院到 2007/12/31, 這兩年共 24 個月的申報資料其 in_date 都是 2006/1/1。 因此最好根據四個日期欄位重新整理該次申報的起迄日,再算人年。 另外提供邏輯上的tip, 不需要分成四個if來處理, start=max(in_date, first_date), end=min(out_date, end_date), duation = end-start就可以。 ※ 引述《jasonfun44 (kk123)》之銘言: : 如果是跟統計軟體有關請重發文章,使用程式做為分類。 : 統計軟體,如SPSS, AMOS, SAS, R, STATA, Eviews,請都使用程式做為分類 : 請詳述問題內容,以利板友幫忙解答,過短文章依板規處置,請注意。 : 為避免版面混亂,請勿手動置底問題,善用E做檔案編輯 : 想利用sas計算不同年份住院檔總人年,但是針對跨年份的住院資料不知道該怎麼處理 : 有嘗試過設條件式,但算出來數字還是很怪,懇請各位大大指導,謝謝。 : %macro a; : %do year=2006 %to 2009; : data temp&year;set h_nhi_ipdte; : where in_year<="&year."<=out_year; : format first_date last_date yymmdd10.; : first_date=mdy(1,1,&year); : last_date=mdy(12,31,&year); : if in_date<=first_date and out_date<=last_date then do; : dur=input(out_date,yymmdd10.)-first_date; : end; : if in_date>=first_date and out_date<=last_date then do; : dur=input(out_date,yymmdd10.)-input(in_date,yymmdd10.); : end; : if in_date<=first_date and out_date>=last_date then do; : dur=input(last_date,yymmdd10.)-first_date; : end; : if in_date>=first_date and out_date>=last_date then do; : dur=last_date-input(in_date,yymmdd10.); : end; : run; : proc append base=input data=temp&year force;quit;%end; : %mend;%a; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.168.218 ※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1555698868.A.E2B.html

04/20 18:50, 6年前 , 1F
04/20 18:50, 1F

04/22 18:10, 6年前 , 2F
感謝大大解惑
04/22 18:10, 2F

04/22 18:21, 6年前 , 3F
後來自己程式碼改了也放棄4個if,改成一天天掃有幾個
04/22 18:21, 3F

04/22 18:22, 6年前 , 4F
有幾個人住院....
04/22 18:22, 4F
文章代碼(AID): #1SkXIquh (Statistics)