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);
. . . .

Но если вы предпочитаете решение без макросов, я могу отредактировать. Просто дай мне знать.

Другие вопросы по тегам