如何提取字符串变量的日期?

时间:2018-10-18 15:16:33

标签: stata

我有一些公司名称:

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 :(得分:2)

以下对我有用:

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.            |
     +--------------------------------------------+