#sql #sas #claims
Вопрос:
Все: Я пытаюсь проверить, следует ли покрывать пребывание в больнице на основе данных о регистрации с помощью SAS.
Здесь есть два стола:
- «enr» : 2 года двоичного числа (0/1), если пациент был зарегистрирован в этом месяце.
data enr; input id year jan feb mar apr may jun jul aug sep oct nov dec; cards; 1 2018 0 0 0 1 1 0 0 0 0 0 0 1 1 2019 1 1 1 1 1 1 1 1 1 1 1 1 2 2018 1 1 0 0 1 1 1 1 1 1 1 1 2 2019 1 1 1 1 1 1 0 0 0 0 0 0 ;
- «clms» : идентификатор, admit_dt, discharge_dt, dr_id, стоимость
data clms; input id admit_dt mmddyy10. @14dischrg_dt mmddyy10. code dr_id cost; format admit_dt dischrg_dt mmddyy10.; cards; 1 02/01/2019 02/06/2019 470 2 800 1 06/01/2019 06/15/2019 251 30 400 2 10/18/2018 10/22/2018 871 5 250 2 05/18/2019 05/22/2019 999 3 1000 ;
Для каждого «идентификатора» в таблице претензий я хочу определить претензии, подлежащие оплате в соответствии с правилом: для оплаченной претензии пациент должен быть зарегистрирован за 4 месяца до и 4 месяца после даты поступления(admit_dt).
Одна из сложных проблем заключается в том, что формат месяцев в таблице регистрации(символ, например»февраль») отличается от формата даты поступления mmddyyy10 в таблице заявок.
Должен ли я использовать решение sql?
Комментарии:
1. Привет — пожалуйста, не публикуйте данные в виде картинок; публикуйте в виде строк данных, чтобы пользователи могли легко использовать данные в примерах/ответах.
2. @Джо, большое тебе спасибо за совет. Должным образом отмечено.
Ответ №1:
Перенесите enr
данные, вычислите, какие месяцы связаны вместе, затем выполните соединение SQL.
Пример:
data enr_tall;
set enr;
array months jan feb mar apr may jun jul aug sep oct nov dec;
do i = 1 to 12;
month = mdy (i,1,year);
enrolled = months[i];
output;
end;
keep id month enrolled;
run;
data enr_tall_bands;
set enr_tall;
by id month;
retain count4;
if first.id then do;
count4 = 0;
band 1;
end;
if ^first.id and not enrolled and count4 > 0 then do;
count4 = 0;
band 1;
end;
if enrolled then do;
if count4 = 0 then band 1;
count4 1;
end;
run;
proc sql;
create table news as
select
clms.*
, ( select count(distinct band) = 1 and min(enrolled) = 1
from enr_tall_bands as bands
where
bands.id = clms.id
amp; admit_dt between
intnx('month', month, -4)
and
intnx('month', month, 4)
) as
payable
from clms;
Комментарии:
1. Большое спасибо. Это идеально. Я читал об используемых методах. Еще раз спасибо.
2. Обязательно примите и отметьте полезные ответы в stackoverflow.
3. Я попытался это сделать, но получил сообщение, в котором говорилось, что мне нужна «репутация 15» для регистрации голосования.