у меня есть набор данных, и это выглядит следующим образом:как найти отставание первого наблюдения в сгруппированных данных в SAS
id name score
1 daniel 30
1 jane 20
1 keisha 70
2 kelly 30
2 jerry 60
2 jay 40
я хочу найти разницу между баллами, сравнивая ПЕРВОЕ балла каждая группа ко всем другим оценкам в этой группе. Так, например,
я хочу, чтобы сравнить счет Джейн к Дэниелу (30-20 = 10) и сравнить счет Кейши, чтобы Дэниэла (абс (30-70) = 40)
И начать сначала путем сравнения Джерри оценка до келли (абс (30-60 = 30)) и оценка сойки к келли (40-30 = 10).
ID Название сравнить
1 daniel 30 .
1 jane 20 10
1 keisha 70 40
2 kelly 30 .
2 jerry 60 30
2 jay 40 10
Кто-нибудь знает способ, чтобы написать это в SAS? или любую команду SQL?
Я попытался следующие
data scoring_prep;
set scoring_prep;
by id;
if not missing(score) then do;
scorediff = abs(dif(score));
if id ne lag(id) then scorediff = .;
end;
run;
, но это только находка обеспечивает отставание предыдущей записи, так Keisha, например, будет сравниваться с Джейн вместо Дэниела.
Вы можете показать, что вы пытали, и почему это не так? – Tom
спасибо Том, только что обновил мой пост – pynewbee
Ваша функция 'lag' находится внутри оператора' if'. Это большой нет-нет. Если он преднамерен, то он должен быть прокомментирован как таковой. Вы действительно должны прочитать документацию lag(), если вы планируете использовать эту функцию в будущем. –