SAS, как использовать в первую очередь. с НЕДОСТУПНЫМ - PullRequest
0 голосов
/ 04 февраля 2020

У меня возникла эта проблема

Мой код

data step10;
  set step9;
  by referenceid NOTSORTED;
  if first.referenceid then JOIN_KEY=1;
  ELSE JOIN_KEY+1;
run;

Затем выводится сообщение

enter image description here

Последние две строки должны быть 2, поскольку «MBA1» И «MBA2» уже существуют ранее.

За исключением того, что эти две строки должны быть 1, поскольку они уникальны.

Как мне изменить мой код?

1 Ответ

2 голосов
/ 04 февраля 2020

Подгруппой является последовательность смежных строк, имеющих одинаковые значения by-var.

NOTSORTED - для групп обработки, построенных из значений, которые непрерывны пока не отсортировано.

Все ваши данные образца имеют подгруппы размера 1, поскольку ни одно из значений идентификатора не повторяется при просмотре столбца.

Вот два метода, которые вы можете попробовать:

  • сортирует данные по referenceid и <some-other-sequencing-variable> и выполняет обычную групповую обработку.
  • поддерживает га sh из referenceid и счетчиков посещений при обработке набора данных

Ха sh пример (мой sequenceId === ваш join_key):

data want;
  set have;
  if _n_ = 1 then do;
    declare hash ids();
    ids.defineKey('referenceid');
    ids.defineData('referenceid', 'sequenceId');
    ids.defineDone();
  end;

  if ids.find() ne 0 
    then sequenceId = 1;
    else sequenceId + 1;

  ids.replace();
run;
...