Как искать слово в строке слов с ошибками - PullRequest
0 голосов
/ 12 апреля 2019

Я ищу конкретного работодателя в наборе данных SAS.Набор данных не был проверен на орфографию, поэтому, если я ищу Univ, его можно ввести как Unversity, University, Univercity ...

Я пробовал сканировать, подсчитывая соответствующие буквы, «содержит».Это работа, но мне все еще не хватает некоторых.

proc sql;создать таблицу SpecificEmployers как select *, случай, когда работодатель содержит «Univ», затем «Y», иначе «N» заканчивается как Emp из AllEmployers; quit;

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Вам следует изучить некоторые функции редактирования расстояния:

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206133.htm

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002206137.htm

Один из подходов заключается в циклическом просмотре каждого слова в имени работодателя и проверке, имеет ли какое-либо из отдельных слов расстояние редактирования ниже определенного порога по сравнению со строкой university.

0 голосов
/ 12 апреля 2019

В этом случае вместо поиска подстроки я бы предложил поискать отдельные символы, которые чаще всего встречаются, такие как U, N, V ​​и т. Д. Тогда вы можете оставить только те значения, для которых доступны все эти символы.Например, я использовал функцию findc для поиска строки, в которой есть U, N и V

data have;
input string $15.;
datalines;
uNiverstY
UNVERSTy
college
univercity
school
schools
UNIVERSITY
Uversity
unvarcity
school123
;
run;

proc sql;
  select string from have
  where findc(upcase(string),'U')>=1
    and findc(upcase(string),'N')>=1
    and findc(upcase(string),'V')>=1;
  quit;

proc print data=want; run;

, с использованием upcase, также облегчит вашу задачу ... так что вам не нужно беспокоиться о кейсе.Вы можете поставить столько условий, сколько вам нужно, в зависимости от значения

...