SAS - подсчет общего количества зарегистрированных посещений

У нас есть проблема с людьми, которые не предоставляют своевременно информацию о посещении больницы. Я пытаюсь расшифровать, как долго (в среднем) после даты посещения больница будет предоставлять информацию обо всех посещениях, которые произошли в этот день.

Попытка создать таблицу из текущего набора данных, который имеет 3 соответствующих поля: Unique_Visiting_ID, Visit_Date, Date_Created, Chief_Complaint.

Может быть несколько строк с одним и тем же unique_visiting_ID, unique_visiting_id - это уникальный идентификатор для одного посещения пациента. Visit_date - дата посещения. Переменная date_created сообщает нам дату отправки нам строки.

Столбцы в таблице, которые я хотел бы создать: Дни после посещения (0–14) и среднее количество посещений, зарегистрированных в конкретную дату.

Что касается второго столбца, я хотел бы знать: если я ограничиваю дату создания 0 днями после visit_date, сколько посещений (с ненулевым главным_complaint) произошло в дату посещения?

если я ограничиваю дату создания 0 или 1 днями после visit_date, сколько посещений (с ненулевым главным_жалобой) произошло в дату посещения?

если я ограничиваю date_created 0, 1 или 2 днями после visit_date, сколько посещений (с ненулевым Chief_complaint) произошло в эту дату посещения?

и т. д. и т. д., пока вы не дойдете до 1-14 дней после visit_date.

Любые идеи? Я начал с этого, я знаю, что это неправильно, но не знаю, как это исправить ...


person Farah    schedule 13.05.2014    source источник
comment
Чтобы прояснить, причина того, что может быть несколько строк с одним и тем же Unique_Visiting_ID, заключается в нескольких жалобах, правильно? То есть любые две строки с одинаковым Unique_Visiting_ID также имеют одинаковые Visit_Date и одинаковые Date_created, но разные значения для Chief_Complaint?   -  person sparc_spread    schedule 13.05.2014
comment
Нет - я включил сюда только 4 поля, потому что это единственные 4 релевантных; на самом деле у меня 64 переменных, и больницы могут отправлять обновления с разными значениями в любом из полей, но unique_visiting_id сохранит их все вместе. При этом unique_visiting_ID и visit_date останутся такими же, но date_created (дата отправки строки) может измениться, потому что некоторая информация может быть отправлена ​​в первый день, а затем может быть обновлена ​​во второй день. Имеет ли это смысл?   -  person Farah    schedule 14.05.2014


Ответы (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);
. . . .

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

person sparc_spread    schedule 13.05.2014
comment
Спасибо! Для меня макросы имеют смысл, так что все в порядке; уходя с работы сейчас, попробую завтра. Большое спасибо!! - person Farah; 14.05.2014
comment
Привет ... интересно, это сработало? Если нет, я могу попробовать что-нибудь другое. - person sparc_spread; 23.09.2014
comment
Извините, давно забыл сообщить вам, что это сработало. Большое спасибо!! - person Farah; 31.12.2014