Как найти макс. значение переменной для каждого уникального наблюдения в “сложенном” наборе данных

Извините за неопределенный заголовок.

Мой набор данных по существу походит на это:

ID   X
18   1
18   1
18   2
18   1
18   2
369  2
369  3
369  3
361  1

то, что я хочу, должно найти макс. значение x для каждого идентификатора. В этом наборе данных, который был бы 2 для ID=18 и 3 для ID=361.

Любая обратная связь значительно ценилась бы.

6
задан Triad sou. 25 October 2011 в 01:20
поделиться

3 ответа

Proc Means с оператором класса (так что вам не нужно сортировать) и запрос максимальной статистики, вероятно, самый простой подход (непроверенный):

data sample; 
    input id x; 
datalines; 
18  1 
18  1 
18  2 
18  1 
18  2 
369 2 
369 3 
369 3 
361 1 
; 
run; 


proc means data=sample noprint max nway missing; 
   class id;
   var x;
   output out=sample_max (drop=_type_ _freq_) max=;
run; 

Подробнее о Proc Means ( http://support.sas.com/onlinedoc/913/docMainpage.jsp ).

8
ответ дан 8 December 2019 в 15:58
поделиться

Я не совсем понимаю ваш пример. Я не могу представить, что входной набор данных действительно имеет все значения в одном наблюдении. Вы имеете в виду что-то вроде этого?

data sample;
    input myid myvalue;
datalines;
18  1
18  1
18  2
18  1
18  2
369 2
369 3
369 3
361 1
;

proc sort data=sample;
    by myid myvalue;
run;

data result;
    set sample;
    by myid;

    if last.myid then output;
run;

proc print data=result;
run;

Это даст вам такой результат:

Obs    myid    myvalue

 1       18       2   
 2      361       1   
 3      369       3   
3
ответ дан 8 December 2019 в 15:58
поделиться

Используйте соответствующий proc с оператором by. Например,

data sample;
    input myid myvalue;
datalines;
18  1
18  1
18  2
18  1
18  2
369 2
369 3
369 3
361 1
;
run;

proc sort data=sample;
  by myid;
run;

proc means data=sample;
   var myvalue;
   by myid;
run;
0
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: