我有一些公司名称:
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 函数。
有什么建议吗?
答案 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. |
+--------------------------------------------+