Количество записей в час по категориям - PullRequest
0 голосов
/ 22 мая 2019

Я изо всех сил пытаюсь концептуализировать код, который я хотел бы разработать, который бы выводил среднее количество пациентов, увиденных поставщиком.Вот как выглядит фрагмент моего набора данных, который охватывает данные за 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; 

Теперь мне нужно выяснить, сколько часов работал поставщик.Я могу разделить количество пациентов, увиденных на количество отработанных часов.

Я думаю, что я могу использовать переменную Provider_Seen_Date_Time в качестве прокси после выполнения следующего кода для получения часа 'hour = hour (datepart (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

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Исходя из того, что дано, вы можете попробовать следующий код ... однако у меня все еще есть проблемы с данными

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 голос
/ 22 мая 2019

Вы можете сделать это легко в течение двух недель. Первая рассчитывает количество пациентов, посещенных врачом в час, а вторая использует первый вывод для расчета количества часов, отработанных одним врачом в день. Вы можете легко изменить их, изменив операторы 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;
...