作者anniecs ( )
看板Statistics
標題Re: [程式] SAS計算住院檔人年
時間Sat Apr 20 02:34:24 2019
你對健保資料庫的了解可能不太夠,
光用 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://webptt.com/m.aspx?n=bbs/Statistics/M.1555698868.A.E2B.html
1F:推 ChenYinYin: 推 04/20 18:50
2F:→ jasonfun44: 感謝大大解惑 04/22 18:10
3F:推 jasonfun44: 後來自己程式碼改了也放棄4個if,改成一天天掃有幾個 04/22 18:21
4F:→ jasonfun44: 有幾個人住院.... 04/22 18:22