作者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/cn.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