2017-01-05 3 views
2

Я очень ценю вас, ребята, особенно когда у меня возникают проблемы с модуляцией с помощью SAS.sas переменная разность с таким же идентификатором

У меня есть набор данных, такой как следующий.

ID   key  score 
10002817 200207826243 0 
10002817 200207826271 0 
10002817 200208532180 0 
10002976 200301583978 0 
10003685 200302311690 0 
10006588 200401613047 0 
10006588 200502882618 0 
10009377 201007510866 1 
10009377 201111777969 0 
10011044 200801328219 2 
10011044 200803290654 3 
10011044 200803290728 1 
10011044 200803290905 1 
10011044 200803291161 0 

Иногда id повторяется в данных или нет. Я хочу видеть максимальную разницу в счете в соответствии с ID. То есть, форма, подобная следующим.

ID key score diff_score 
10002817 200207826243 0 0 
10002817 200207826271 0 0 
10002817 200208532180 0 0 
10002976 200301583978 0 0 
10003685 200302311690 0 0 
10006588 200401613047 0 0 
10006588 200502882618 0 0 
10009377 201007510866 1 1 
10009377 201111777969 0 1 
10011044 200801328219 2 3 
10011044 200803290654 3 3 
10011044 200803290728 1 3 
10011044 200803290905 1 3 
10011044 200803291161 0 3 

Как я могу сделать это с помощью SAS?

Было бы полезно, если вы мне поможете. Спасибо всем.

ответ

1

Вы можете сделать это с помощью ргос SQL:

proc sql; 
    create table want as 
    select ID, key, score, max(score)-min(score) as diff_score 
    from have 
    group by ID; 
quit; 

Одним из преимуществ использования ргос SQL ваши данные не должны быть отсортированы для этой работы.

+0

ОП ищет максимальную разницу в баллах за один идентификатор. Ваше решение работает с данными примера, но только потому, что минимальный балл равен 0 для каждого идентификатора. Вам нужно изменить расчет на 'max (score) - min (score)' – Longfish

+0

Спасибо за место, просто отредактировал мой ответ. –

Смежные вопросы