在另一个用途的慷慨帮助下,我创建了一个代码,该代码汇总了给定时间在急诊室的病人数量。该代码使用两个变量“ checkin_date_time”和“ dispo_date_time”来确定患者在急诊室的时间。因此,例如,从上午10点到中午在这里的病人被算作急诊时间为上午10点和上午11点。
要获得平均值,我可以每天运行代码,或者在几周/几个月的时间内运行代码时,手工简单地计算平均值;但是,我很好奇SAS中是否有一个更简单的选项可以产生输出平均值。
这是我正在使用的代码
data ED_TAT1;
set ED_TAT;
where datepart(checkin_date_time) between '01MAR2019'd and '31MAR2019'd;
format checkin_date_time dispo_date_time datetime18.;
run;
data ED_TAT2;
set ED_TAT1;
counttime = round(checkin_date_time,3600);
format counttime datetime18.;
do while (counttime le round(dispo_date_time,3600) );
hr = timepart(counttime);
day = weekday(datepart(counttime));
output;
counttime= intnx('hour',counttime,1,'B');
end;
run;
proc tabulate data=ED_TAT3;
class hr day;
format hr timeampm5. ;
table hr='', day*n=''/ box=hr;
label hr='Hour'
day= 'Day of week';
run;
它产生一个看起来像这样的表
Hour Day of Week
1 2 3 ...
12AM 234 423 533
1AM 464 123 323
2AM 123 213 324
...
我想生成相同的表,但是每个数据单元格包含每周中每天每小时的平均值。因此,对于第1天的12AM,我希望该单元格为234/5(3月的星期日)= 46.8 个患者。
我尝试使用下面的代码来获取平均值,但输出的平均值不正确-远远低于除以三月的天数时的平均值。
proc sql;
create table Avg as
select hr, mean(case when day=1 then . else day end) as day1,
mean(case when day=2 then . else day end) as day2
from ED_TAT3
group by hr;
quit;
答案 0 :(得分:1)
PROC MEANS和FREQ是SAS中最有用的两个PROC,值得学习。
data have;
informat patient_id $2. checkintime releasetime datetime18.;
format checkintime releasetime datetime18.;
input patient_id checkintime releasetime ;
datalines;
01 01AUG2015:02:49:00 01AUG2015:08:29:00
02 01AUG2015:01:30:00 02AUG2015:14:29:00
03 02AUG2015:21:30:00 02SEP2015:01:20:00
;
run;
data temp;
set have;
counttime = round(checkintime,3600);
format counttime datetime18.;
do while (counttime le round(releasetime,3600) );
hr = timepart(counttime);
day = weekday(datepart(counttime));
date = datepart(counttime);
output;
counttime= intnx('hour',counttime,1,'B');
end;
run;
proc freq data=temp;
by date;
format date yymon6.;
table hr*day / out=raw_counts;
run;
proc means data=raw_counts stackods N MEAN;
class date hr day;
var count;
ods output summary=want;
run;
proc print data=want;run;