SAS: получить номер наблюдения для максимального / минимального значения переменной
Я пытаюсь получить в качестве макропеременной или простой переменной номер наблюдения, который является мин / макс одной переменной.
Я могу легко получить значение этого мин / макс, через процесс SQL
proc sql noprint;
select min(variable) into :minvariable
from have;
quit;
Или через сводку процедур
proc summary data=want;
var variable;
output out=mintable min=minvariable;
run;
Но я не нашел ни одного способа, чтобы легко найти число наблюдений, которому соответствует этот минимум.
Предыстория: я хочу отделить свою отсортированную базу данных на основе этого числа наблюдения, потому что я знаю, что отсортированный правильно есть глобальный минимум, и моя интересующая переменная следует U-образной кривой
2 ответа
Вы можете сделать это за один проход через данные, используя retain
, Там, где одно и то же значение минимума / максимума встречается несколько раз, сохраняется наблюдение за первым увиденным.
данные хотят; set end = eof; сохранить minval minobs maxval maxobs; если значениеmaxval или отсутствует (maxval), тогда сделайте; maxval = значение; maxobs = _n_; конец; если eof тогда вывод; бежать;
Надеюсь, я вас правильно понял. Вы хотите знать, в какой позиции ваш minvariable находится на вашем столе? Затем вы можете просто запустить шаг данных и записать Позицию (которая является _n_ в шаге данных) в макро-переменную (или переменную данных, если вы предпочитаете), когда ваша минимальная переменная совпадает.
data _null_;
set have;
if variable =&minvariable then
call symputx("obsnr", _n_);
run;
Это работает, если ваш minvariable уникален