Как извлечь дату строковой переменной? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть несколько корпоративных названий:

Bosna Auto

Sunsource – delisted 10/08/01

Healthgrades – delist. 11/09/02

Healthcare dead – 12/10/03

Healthco untl. 

Некоторые имена содержат дату, но в ее представлении есть нерегулярные шаблоны.Некоторые имена не включают дату.Я хотел бы извлечь только даты для имен, которые содержат шаблон --/--/--.Другая проблема заключается в том, что в дате иногда может отсутствовать ноль.

Я попробовал следующий код:

gen numend=1 if regexm(Name, "[0-9]$") == 1 /*Identify names that end with a number*/
replace numend=0 if numend==.

gen symbcont=1 if regexm(Name, "/") /*Identify names that contain a / symbol */
replace symbcont=0 if symbcont==.

gen date = substr(Name, + 5, .) if numend==1 & symbcont==1 /*Both criteria increase my chances to obtain a date as an output */

Этот код иногда извлекает дату и много других нежелательных символов, потому что код несовершенен.Я подозреваю, что может быть способ извлечь то, что я хочу, с помощью функции substr .

Есть предложения?

1 Ответ

0 голосов
/ 18 октября 2018

У меня работает следующее:

clear

input strL names
"Bosna Auto"
"Sunsource – delisted 10/08/01"
"Healthgrades – delist. 11/09/02"
"Healthcare dead – 12/10/03"
"Healthco untl."
end

generate dates = substr(names, strpos(names, "/") - 2, strrpos(names, "/") + 2) /// 
                 if strmatch(names, "*/*/*")

list

     +--------------------------------------------+
     |                           names      dates |
     |--------------------------------------------|
  1. |                      Bosna Auto            |
  2. |   Sunsource – delisted 10/08/01   10/08/01 |
  3. | Healthgrades – delist. 11/09/02   11/09/02 |
  4. |      Healthcare dead – 12/10/03   12/10/03 |
  5. |                  Healthco untl.            |
     +--------------------------------------------+
...