мы можем использовать функцию задержки, чтобы найти лечение от предыдущего посещения, а затем проверить все строки, если обработка не совпадает с предыдущей обработкой. Для этого давайте создадим примерный набор данных следующим образом:
DATA example;
input PATID TRT$ VISNO WEIGHT;
datalines;
1 A 0 95
1 A 2 96
1 B 6 96
1 B 12 99
2 A 0 80
2 A 6 81
3 A 0 98
3 A 4 120
4 B 0 100
5 A 0 102
5 B 6 95
5 A 12 98
run;
, тогда мы можем захотеть убедиться, что примерный набор данных отсортирован по PATID и visno. Это делается для того, чтобы предыдущий курс лечения рассчитывался для того же PATID, что и для предыдущего посещения:
proc sort data=example;
by PATID visno;
run;
теперь позволяет найти лечение для каждого PATID за последний визит. Здесь используется lag1, который находит предыдущую обработку и сохраняет значение в новом поле PREV_TRT. оператор if должен гарантировать, что первая строка для каждого PATID не имеет значения PREV_TRT.
data lagged_example;
set example;
by PATID;
PREV_TRT=lag1(TRT);
if first.PATID then
PREV_TRT='';
run;
Наконец, мы используем pro c sql, чтобы создать таблицу followup_trt_change, в которой есть все строки, в которых изменяется процедура, по сравнению с предыдущим посещением для каждого PATID. Обратите внимание, что этот шаг является необязательным.
proc sql;
create table followup_trt_change as select * from lagged_example where
TRT <> PREV_TRT and not missing(PREV_TRT);
quit;
Ниже приведены все идентификаторы PATID, которые хотя бы раз изменили свое лечение после последнего посещения.
proc sql;
select distinct PATID from lagged_example where TRT <> PREV_TRT and not
missing(PREV_TRT);
quit;