SAS Array Looping (Делать, пока l oop) - PullRequest
0 голосов
/ 28 апреля 2020
data JE.KeywordMatchTemp1;
  if _n_ = 1 then do;
    do i = 1 by 1 until (eof);
      set JE.KeyWords end=eof;
      array keywords[100] $30 _temporary_;
      keywords[i] = Key_Words;
    end;
    last_i = i ;
    retain last_i ;
  end;
  set JE.JEMasterTemp;
  match = 0;
  do i = 1 to last_i while (match=0) ;
    if index(descr, trim(keywords[i]) ) then match = 1;
  end;
  drop i last_i;
run;

Привет. Могу ли я спросить, что делает это утверждение if _n_ = 1 then do;

Я пытался удалить это утверждение и оператор set set JE.JEMasterTemp; только для чтения в 1 наблюдении.

I нужна помощь ...

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Следует помнить, что большинство шагов данных не останавливаются в конце шага данных. Вместо этого они останавливаются, когда читают после конца ввода (либо в операторе INPUT, либо в инструкции SET / MERGE).

Переменная _N_ automati c увеличивается на единицу за каждую итерацию шага данных. Таким образом, _N_=1 является проверкой того, является ли это первой итерацией. Шаг данных предназначен для чтения ВСЕХ КЛЮЧЕВЫХ СЛОВ на первой итерации. А затем прочитать одно наблюдение из JEMASTERTEMP за одну итерацию. Поэтому обычно шаг данных останавливается, когда он читает после конца JEMASTERTEMP.

Удаление этой строки приводит к тому, что на второй итерации происходит попытка прочитать больше наблюдений из KEYWORDS, но при этом прочитать все наблюдения на первой итерации. Поэтому без этого оператора IF шаг останавливается на вершине второй итерации, поэтому записывается только одно наблюдение.

0 голосов
/ 28 апреля 2020

Переменная _ N _ представляет количество повторений шага DATA. Подробнее об этом можно прочитать здесь: Automati c Переменные . Итак, только на первой итерации вы:

  • Считываете набор данных JE.Keywords по одному obs за раз и увеличивает переменную i для каждого obs.

  • вставляет значение Key_Words в i-е место в массиве ключевых слов.

  • Назначает значение i переменной last_i, когда все JE_Keywords были прочитаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...