В SAS, как я могу выбрать все группы идентификаторов, которые имеют отношение c между другими переменными в группе идентификаторов? - PullRequest
0 голосов
/ 03 февраля 2020

Например, я хочу получить набор данных2 из набора данных1.

Из набора данных1 все идентификаторы, значение1 любой из указанных фаз c которых более чем на 10 пунктов больше, чем значение2 предыдущей фазы в идентификаторах (указано стрелкой), были выбраны в наборе данных 2.

Dataset1

Dataset2

Я использую версию SAS EG, и я не смог сделать такой запрос.

Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020
  1. Рассчитать разницу для каждой группы (DIF())
  2. Получить идентификаторы, где разница больше 10
  3. Фильтр основной таблицы

    data temp;
     set have;
     by id phase;
     /*Part 1*/
     difference = dif(value1);
     if first.id difference = .;
     /*Part 2*/
     if difference > 10 then output;
    run;
    
    /*Part 3*/
    proc sql;
    create table want as
    select * from have
    where ID in (select distinct ID from temp);
    quit;
    
0 голосов
/ 03 февраля 2020

Вы можете сделать это в SQL. Чтобы получить строки, соответствующие условию:

select t.*
from t join
     t tnext
     on tnext.id = t.id and 
        tnext.phase = t.phase + 1
where tnext.value1 > t.value2 + 10;

Затем вы можете перечислить идентификаторы, используя in или exists:

select t.*
from t
where t.id in (select t2.id
               from t t2 join
                    t tnext
                    on tnext.id = t2.id and 
                       tnext.phase = t2.phase + 1
               where tnext.value1 > t2.value2 + 10
              );
...