每小时按类别划分的记录数

时间:2019-05-22 15:42:43

标签: sas

我正在努力构想我想开发的代码,该代码将输出提供者看到的平均患者人数。这是我的数据集(跨越3年的数据)的摘要,如下所示(我有三个变量,patient_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; 

现在,我需要弄清楚服务提供者的工作时间,以便可以将看过的患者人数除以工作时间。

我认为在运行以下代码以获取小时“小时=小时(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)一种更准确或更有效的方法(有数百个不同的提供者)来计算每个提供者的总工作时间?

OR

2),这是更理想的代码,用于简单地计算出提供者每小时看到的患者数量。

所需的输出:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

根据给出的内容,您可以尝试下面的代码。.但是,我仍然对数据感到担心

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;

答案 1 :(得分:1)

您可以在两个proc频率内轻松完成此操作。 第一个将计算每小时医生看病的人数,第二个将使用第一个输出来计算每个医生每天工作的小时数。您可以通过修改TABLE语句轻松地修改它们。

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;