У меня есть элементарный набор навыков SAS, большинство из которых включает "proc sql", поэтому не стесняйтесь оспаривать фундаментальный подход к его использованию.
Я пытаюсь сопоставить один набор личных данных сдругой набор, первый имеет около 400 тыс. строк, а остальные 22 миллиона. Сложность состоит в том, что строки 400 КБ содержат предыдущие имена и почтовые индексы, а также текущие (все в одной строке), поэтому мой подход (код ниже) состоял в том, чтобы объединить все фамилии вместе и все почтовые индексы вместе и найтистрока из второй таблицы (одно имя и почтовый индекс) в соединенных строках с использованием функции индекса (источник, отрывок).
proc sql;
CREATE TABLE R4 AS
SELECT DISTINCT
BS.CUST_ID,
ED.MATCH_ID
FROM T_RECS_WITH_CONCATS BS
INNER JOIN T_RECS_TO_MATCH ED
ON LENGTH(ED.SinglePostcode) > 4
AND index(BS.AllSurnames,ED.SingleSurname) > 0
AND index(BS.AllPostcodes,ED.SinglePostcode) > 0
;
QUIT;
В приведенном выше примере все имена могут содержать до 9 фамилий (разделенных |)и AllPostcodes - до 9 сцепленных почтовых индексов (опять же, разделенных |).
Недостатком этого является, конечно, то, что для его запуска требуется вечность. Есть ли более эффективный способ сделать это, либо на шаге proc sql, либо на шаге реальных данных?