Замена частей переменной и устранение пробелов - PullRequest
0 голосов
/ 03 мая 2019

У меня большой набор данных в Stata, и я должен очистить имена, чтобы позже найти их имена.

Распространенной проблемой в моих данных являются умлауты, которые отображаются следующим образом:

JEAN S ОЧЕНЬ БОЛЕЕ БАСТИЕН -> JEAN SÉBASTIEN

Я могу удалить ACUTE OVER, используя следующую команду:

replace name=subinstr(name," ACUTE OVER ","",.)

Однако я все ещенужно учитывать расстояние между E и BASTIEN.Я не могу просто удалить все пробелы, так как их может быть больше двух.

Есть ли способ, которым я могу добиться этого довольно простым способом?

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

1 Ответ

1 голос
/ 04 мая 2019

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

Например, если умляуты в ваших данных всегда располагаются после имени и вы заранее знаете, что это такое, вы можете сделать следующее:

clear

input str50 stringvar
"JEAN S ACUTE OVER E BASTIEN"
"JERARD DE ALOHA HEY P ARTIER"
"Etienne SOMETHING ANSEL"
end

replace stringvar = subinstr(strtrim(stringvar), " ", ";", 1)
replace stringvar = subinstr(stringvar, " ", "", .)

foreach x in "ACUTEOVER" "ALOHAHEY" "SOMETHING" {
    replace stringvar = subinstr(stringvar, "`x'", "", .)
}

replace stringvar = subinstr(stringvar, ";", " ", 1)

list

     +------------------+
     |        stringvar |
     |------------------|
  1. |   JEAN SEBASTIEN |
  2. | JERARD DEPARTIER |
  3. |    Etienne ANSEL |
     +------------------+

Обратите внимание, что имена, используемые в этом ответе, являются вымышленными французскими!

...