看板 Statistics 關於我們 聯絡資訊
你對健保資料庫的了解可能不太夠, 光用 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
ChenYinYin: 推 04/20 18:50
jasonfun44: 感謝大大解惑 04/22 18:10
jasonfun44: 後來自己程式碼改了也放棄4個if,改成一天天掃有幾個 04/22 18:21
jasonfun44: 有幾個人住院.... 04/22 18:22