SAS как Dense_rank - PullRequest
       12

SAS как Dense_rank

0 голосов
/ 03 февраля 2020

Я новичок в sas, раньше я делал oracle SQL

Я уже делал подобный вопрос раньше

Как хитро оценить SAS?

Я думал, что этот вопрос может решить проблему.

, но

Я застрял.

поэтому мой код такой

data stepstep;
   input emplid KEY:$3. count;
   cards;
11 11Y    1
11 11Y    2
11 11N    3
11 11N    4
11 11Y    5
11 11N    6
12 12Y    1
12 12Y    2
12 12N    3
;
run;

и затем я попытался

data stepstep2;
   set stepstep;
   by key  emplid NOTSORTED;
   if first.key AND first.emplidthen rank=1;
     ELSE rank+1;
   run;

Вывод это

enter image description here

Я хочу показать

emplid  key   count  rank
11      11Y    1      1
11      11Y    2      1
11      11N    3      2 
11      11N    4      2
11      11Y    5      3
11      11N    6      4
12      12Y    1      1
12      12Y    2      1
12      12N    3      2

поэтому приходит новый emplid, я хочу, чтобы «Rank» возвращался к начальному счету с 1.

поэтому в этом примере, когда приходит первый emplid «12», ранг возвращается к 1

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

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Вы должны правильно использовать свои группы BY, и я думаю, что вы используете их в неправильном порядке для начинающих. Попробуйте вместо этого:

    data stepstep2;
       set stepstep;
       by emplid KEY NOTSORTED;

       if first.emplid then rank=1; *start of each emplid group;
       ELSE if first.key rank+1; *start of each new key;

    run;
0 голосов
/ 03 февраля 2020

Вы также можете использовать выписку по сумме:

data stepstep2;
  set stepstep;
  by emplid key NOTSORTED;
  if first.emplid then rank=0;
  rank + first.key;
run;
...