Может кто-нибудь придумать хорошую идею для достижения следующих целей в SAS?
У нас есть
data test;
input ID $ Score Month_visit;
datalines;
Pat1 10 0
Pat1 9 3
Pat1 3 6
Pat1 7 8
;
, и я хочу, чтобы эти тестовые данные были преобразованы в
data final;
input ID $ Score Month;
datalines;
Pat1 10 0
Pat1 10 1
Pat1 10 2
Pat1 9 3
Pat1 9 4
Pat1 9 5
Pat1 3 6
Pat1 7 7
Pat1 7 8
;
так что в основном счет должен быть напечатан так же часто, как разница (Month_visit - "change of Month_visit"
), а затем просто пересчитан.
У меня такое ощущение, что это можно сделать с помощью функции lag()
- и output statement
но пока не смог сделать это правильно. Любые идеи?
Обновление:
На самом деле оптимальным было бы также охватить процесс для различных ID
с в наборе данных:
data test;
input ID $ Score Month_visit;
datalines;
Pat1 10 0
Pat1 9 3
Pat1 3 6
Pat1 7 8
Pat2 6 1
Pat2 2 3
Pat2 3 6
Pat2 7 8
;
Решение для обновления:
Если мы придерживаемся решения, предоставленного @draycut, мы можем просто ввести by statement
в шаг данных, мы получим:
data want (drop=Month_visit:);
merge test
test (firstobs=2 keep=Month_visit rename=Month_visit=Month_visit_);
run;
data final;
set want;
by ID;
if (last.ID NE 1) then do Month = Month_visit to Month_visit_-1;
output;
end;
else do;
Month = Month_visit;
output;
end;
run;