проверка заявлений о зачислении на медицинское обслуживание

#sql #sas #claims

Вопрос:

Все: Я пытаюсь проверить, следует ли покрывать пребывание в больнице на основе данных о регистрации с помощью SAS.

Здесь есть два стола:

  1. «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
    ;
     
  2. «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» для регистрации голосования.