SAS - подсчет зарегистрированных посещений
У нас проблема с людьми, которые не предоставляют информацию о посещении больницы своевременно. Я пытаюсь определить, как долго (в среднем) после даты посещения больница будет предоставлять информацию обо всех посещениях, которые произошли в эту дату.
Попытка создать таблицу из текущего набора данных, который имеет 3 соответствующих поля: Unique_Visiting_ID, Visit_Date, Date_Created, Chief_Complaint.
Может быть несколько строк с одним и тем же unique_visiting_ID, unique_visiting_id является уникальным идентификатором для одного посещения пациента. Дата посещения - это дата посещения. Переменная date_created сообщает нам дату, когда нам была отправлена строка.
Столбцы в таблице, которые я хотел бы создать: дни после посещения (0-14) и среднее число посещений, зарегистрированных на определенную дату
Для второго столбца я хотел бы знать: если я ограничиваю дату, созданную 0 днями после даты посещения, сколько посещений (с ненулевым значением Chief_complaint) произошло в дату посещения?
если я ограничиваю дату, созданную 0 или 1 днем после даты посещения, сколько посещений (с ненулевым значением Chief_complaint) произошло в день посещения?
если я ограничиваю дату_созданием 0, 1 или 2 днями после даты посещения, сколько посещений (с ненулевым значением Chief_complaint) произошло в эту дату посещения?
и т. д. до тех пор, пока вы не получите 1-14 дней после даты посещения.
Есть идеи? Я начал с этого, что я знаю, что это неправильно, но не уверен, как это исправить...
1 ответ
Насколько я понимаю, вы действительно хотите создать две таблицы:
Список всех посещений, с количеством дней до отправки / создания для каждого
Список всех дат с количеством посещений за дату, включая количество отправленных через 0-14 дней после
Если это то, что вы имели в виду, этот макрос должен помочь. dsn_in
это имя вашего исходного набора данных. dsn_out_days
Имя набора данных, содержащего результаты для первой точки маркера. dsn_out_summary
Имя набора данных, содержащего результаты для второй точки маркера.
%MACRO do_analysis (dsn_in = , dsn_out_days = , dsn_visits_by_date = );
%LOCAL i ;
DATA &dsn_out_days;
SET &dsn_in;
days_after_visit = INTCK ('DAYS', Visit_Date, Date_Created);
%DO i = 0 %TO 14;
submitted_up_to_&i._days_after = (days_after_visit <= &i);
LABEL submitted_up_to_&i._days_after = "Submitted Up To &i Days After" ;
%END;
RUN;
PROC SUMMARY NWAY DATA = &dsn_out_days (
WHERE = ( NOT MISSING (Chief_Complaint) )
);
CLASS Visit_Date;
OUTPUT
OUT = &dsn_visits_by_date (
DROP = _TYPE_
RENAME = (_FREQ_ = total_visits)
)
SUM (
%DO i = 0 %TO 14;
submitted_up_to_&i._days_after
%END;
) =
;
RUN;
/* Comment out this data step to see how everything works under the hood */
DATA &dsn_out_days;
SET &dsn_out_days (
DROP =
%DO i = 0 %TO 14;
submitted_up_to_&i._days_after
%END;
);
RUN;
DATA &dsn_visits_by_date;
SET &dsn_visits_by_date ;
LABEL total_visits = "Total Visits";
RUN;
PROC SORT DATA = &dsn_visits_by_date ;
BY Visit_Date ;
RUN;
%MEND;
Обратите внимание, что %DO
использование макросов позволяет сократить трудоемкость набора текста:
submitted_up_to_1_days_after = (days_after_visit <= 1);
submitted_up_to_2_days_after = (days_after_visit <= 2);
submitted_up_to_3_days_after = (days_after_visit <= 3);
. . . .
Но если вы предпочитаете решение без макросов, я могу отредактировать. Просто дай мне знать.