从输出表获取平均值

时间:2019-05-03 15:03:43

标签: sas

在另一个用途的慷慨帮助下,我创建了一个代码,该代码汇总了给定时间在急诊室的病人数量。该代码使用两个变量“ 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;

1 个答案:

答案 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;