You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Stata中提取字符串数字左侧字符的方法:药物名称标准化需求

Stata药物名称标准化:提取剂量前的名称部分

针对你提到的两种提取需求,以下是具体的Stata实现方案:

需求1:提取到独立剂量数值(整数/百分比/范围)之前的名称

核心是区分名称中带数字的词(如12HR)和独立的剂量数值(如120、0.65%、50-25),只截断到独立剂量数值之前的内容。

实现代码

* 生成新变量存储提取结果
gen new_name = ""

* 匹配带后续内容的剂量数值(如"3 COMBO PACK")
replace new_name = regexs(1) if regexm(drug_name, "^(.+?)\s+(?:\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)*%?)\s")

* 匹配位于字符串末尾的剂量数值(如无后续内容的情况)
replace new_name = regexs(1) if regexm(drug_name, "^(.+?)\s+(?:\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)*%?)$")

* 查看结果
list drug_name new_name

正则逻辑说明

  • ^(.+?):非贪婪匹配从字符串开头到目标模式前的所有内容,确保只截取到第一个剂量数值之前的部分
  • \s+:匹配剂量数值前的空格分隔符
  • (?:\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)*%?):匹配各类剂量格式,包括整数、小数、数值范围、百分比(非捕获组,仅用于匹配)
  • \s/$:匹配剂量数值后的空格或字符串结尾,确保是独立的剂量词

预期结果

drug_namenew_name
SM MICONAZOLE 3 COMBO PACKSM MICONAZOLE
SM SALINE 0.65% NASAL SPRAYSM SALINE
SM SINUS 12HR 120 MG CAPLETSM SINUS 12HR
SM MOTION SICKNESS 25 MG TABSM MOTION SICKNESS
ATENOLOL-CHLORTHAL 50-25 TBATENOLOL-CHLORTHAL
OXYMORPHONE HCL 10 MG TABLETOXYMORPHONE HCL
D-AMPHETAMINE ER 10 MG CAPSULED-AMPHETAMINE ER
LISINOPRIL-HYDROCHLOROTHIAZIDE 20-25 MG TABLISINOPRIL-HYDROCHLOROTHIAZIDE
SOD SULFACE-SULF 9.8-4.8% CLSRSOD SULFACE-SULF

需求2:忽略名称中所有含数字的词,提取纯文字名称

如果需要完全剔除任何包含数字的词(如12HR),只保留纯文字组成的名称部分,可以用以下方法:

实现代码

* 直接替换掉第一个含数字的词及后续所有内容
gen new_name_no_num = regexr(drug_name, "\s+\w*\d\w*.*$", "")

* 查看结果
list drug_name new_name_no_num

正则逻辑说明

  • \s+\w*\d\w*:匹配第一个包含数字的词(前面带空格分隔)
  • .*$:匹配该词之后的所有内容
  • 替换为空字符串后,即得到纯文字组成的前缀名称

预期结果

drug_namenew_name
SM SINUS 12HR 120 MG CAPLETSM SINUS

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:59:53