Поиск в хеш-таблице по нескольким столбцам в SAS - PullRequest
0 голосов
/ 31 мая 2019

У меня есть данные с 40M строк.Есть 50 столбцов, которые я хотел бы извлечь из них строки.Я использовал обычный шаг данных с массивом для выполнения задачи, но для извлечения потребовалось более 2 часов.

Я знаю, как использовать хэш-таблицу в SAS для простого соединения или поднабора, указав сначала таблицу поиска.Однако я предпочитаю использовать регулярное выражение для извлечения здесь.Текущее извлечение использует коды что-то вроде ниже.

Как мне выполнить поиск по хеш-таблице в этих 50 столбцах в SAS без справочной таблицы?

data want;
   set have;
   array cols {*} $ col1 - col50;

   do i = 1 to dim(cols)
      if prxmatch('/F[0-9].*[123]/', cols[i])
         then output;
   end;
run;

1 Ответ

0 голосов
/ 02 июня 2019

Группировка по шаблону регулярных выражений установит условия, необходимые для получения совпадения с PRXPOSN.Совпадения могут быть сохранены в хэше, который выводится в конце обработки набора данных.

data _null_;
   set have end=done;
   array cols {*} $ col1 - col50;

   rxid = prxparse('/(F[0-9].*[123])/');

   if _n_ = 1 then do;
     length match $200;
     declare hash matches();
     matches.defineKey(match);
     matches.defineDone();
   end;

   do i = 1 to dim(cols)
      if prxmatch(rxid, cols[i]) then do;
        match = prxposn (rxid, 1, cols[i]);
        matches.replace();
      end;
   end;

   if done then matches.output(dataset:'want_matches');
run;
...