按类别按每小时记录数量

  • 本文关键字:记录 每小时 sas
  • 更新时间 :
  • 英文 :


我正在努力概念化一个我想开发的代码,该代码将输出提供者看到的平均患者数量。这是我的数据集涵盖3年数据的片段(我有三个变量,即患者_id,提供商名称以及提供者看到的患者以日期/时间格式显示的时间:

 patient_fin     first_Md_seen   Provider_Seen_Date_Time
   1                 Bob              5/1/2018 4:19:00  AM
   2                 Bob              5/1/2018 4:29:00  AM
   3                 Bob              5/1/2018 4:30:00  PM
   4                 Sally            5/1/2018 7:39:00  AM
   5                 Sally            5/1/2018 7:49:00  AM
   6                 Sally            5/1/2018 8:55:00  PM
   7                 Bubba            5/3/2018 12:19:00 AM
   8                 Bob              5/3/2018 4:10:00  AM
   ....

要计算提供者看到的患者的数量,我编写了以下代码:

 data ED_TAT3;
 SET ED_TAT2;
 if patient_fin ne . then Patient_fin_count=1;
 run;
 proc means data = ED_TAT3;
 class first_Md_seen;
 var Patient_fin_count;
 run; 

现在,我需要弄清楚提供商工作了多少小时,以便我可以将看到的患者数除以工作的小时数。

我认为我可以在运行以下代码以获取小时'hour = hour(datePart(provider_seen_date_time((之后使用Provider_seen_date_time变量作为代理。

这样的代码会给我正确的小时数量提供商

 data new1;
 set new;
 hour = hour (datepart(Provider_Seen_Date_Time));
 if Provider_Name = 'Bob' and hour ne . then hour_worked = 1;
 run; 

在那里:

1(一种更准确或更高效的(有数百种不同的提供商(来弄清每个提供商工作的总小时数?

2(这是更理想的代码,可以简单地弄清楚提供者看到的患者数量。

所需的输出:

       Provider        Avg Patients Seen per Hour 
         Bob                         5
         Sally                       4
         Bubba                       6

预先感谢!

基于给出的内容,您可以尝试以下代码。但是,我仍然对数据

有疑问
data ed_tat2;
input patient_fin first_Md_seen$ Provider_Seen_Date_Time mdyampm25.2;
format Provider_Seen_Date_Time mdyampm25.;
hour = hour (Provider_Seen_Date_Time);
date_seen=datepart(Provider_Seen_Date_Time);
format date_seen date9.;
datalines;
1 Bob 5/1/2018 4:19:00 AM
2 Bob 5/1/2018 4:30:00 PM
3 Sally 5/1/2018 7:39:00 AM
4 Sally 5/1/2018 7:59:00 PM
5 Bubba 5/3/2018 12:19:00 AM
6 Bob 5/3/2018 4:10:00 AM
7 Bob 5/3/2018 4:30:00 AM
8 Bob 5/3/2018 5:10:00 AM
run;
proc sort data=ed_tat2; by first_Md_seen date_seen hour; run;
data ed_tat3;
 set ed_tat2;
  by first_Md_seen date_seen hour;
  if not first.first_Md_seen and date_seen=lag(date_seen) and hour=lag(hour) then hour=0;
  else hour=1;
run;
proc sql;
select first_Md_seen, date_seen, count(patient_fin) as number_of_patients_seen, sum(hour) as number_of_hours, count(patient_fin)/sum(hour) as patients_seen_per_hour
from ed_tat3
where hour ne .
group by first_Md_seen, date_seen;
select first_Md_seen, count(patient_fin) as number_of_patients_seen, sum(hour) as number_of_hours, count(patient_fin)/sum(hour) as patients_seen_per_hour
from ed_tat3
where hour ne .
group by first_Md_seen;
quit;

您可以在两个proc freq中轻松执行此操作。第一个将计算每小时医生看到的患者数量,第二个使用第一个输出来计算每天工作的小时数。您可以通过修改表语句来轻松修改这些内容。

data ed_tat2;
    input patient_fin first_Md_seen $ Provider_Seen_Date_Time mdyampm25.2;
    format Provider_Seen_Date_Time mdyampm25.;
    hour=hour (Provider_Seen_Date_Time);
    date_seen=datepart(Provider_Seen_Date_Time);
    format date_seen date9.;
    datalines;
1 Bob 5/1/2018 4:19:00 AM
2 Bob 5/1/2018 4:30:00 PM
3 Sally 5/1/2018 7:39:00 AM
4 Sally 5/1/2018 7:59:00 PM
5 Bubba 5/3/2018 12:19:00 AM
6 Bob 5/3/2018 4:10:00 AM
7 Bob 5/3/2018 4:30:00 AM
8 Bob 5/3/2018 5:10:00 AM
;
run;
*counts per hour;
proc freq data=ed_tat2 noprint;
    table first_Md_seen*date_seen*hour / out=provider_counts;
run;
*hours worked per doctor;
proc freq data=provider_counts noprint;
    table first_Md_seen*date_seen / out=provider_hours;
run;
title 'Number of patients seen';
proc print data=provider_counts label;
    label count='# of patients per hour';
    title 'Number of hours worked';
proc print data=provider_hours label;
    label count='# of hours worked in a day';
run;

最新更新