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

如何按首个数字字符解析字符串变量以拆分药名与剂量?

在Stata中拆分药物名称与剂量

针对你提供的药物名称字符串,可通过正则表达式精准拆分出药名和剂量,替代strkeep的方案如下:

步骤1:准备示例数据(若已有数据可跳过)

frame create test
frame change test
input str109 med_name
"NITROFURANTOIN MACROCRYSTAL 100 MG CAPSULE"
"ACETAMINOPHEN 500 MG TABLET"
"APIXABAN 5 MG TABLET"
"ATOVAQUONE 500 MG/5 ML ORAL SUSPENSION"
"ATOVAQUONE 750 MG/5 ML ORAL SUSPENSION"
"ATOVAQUONE 750 MG/5 ML ORAL SUSPENSION"
end

步骤2:拆分药名与剂量

提取药物名称

提取首个数字出现前的所有文本,并去除末尾多余空格:

gen drug_name = ustrtrim(regexr(med_name, "[0-9].*", ""))
  • 逻辑:用regexr将字符串中第一个数字及之后的所有内容替换为空,再用ustrtrim清理首尾空格。

提取剂量(含单位)

精准匹配数字+单位部分(排除末尾剂型如CAPSULE/TABLET):

gen dosage = ustrtrim(regexs(1)) if regexm(med_name, "([0-9].*?)\s+(CAPSULE|TABLET|ORAL SUSPENSION)")
  • 逻辑:用regexm匹配从数字开始、到剂型前的内容,通过regexs(1)提取匹配到的剂量部分,再清理空格。

如果不需要区分剂型,希望剂量包含剂型内容,可简化为:

gen dosage = ustrtrim(regexr(med_name, "^[^0-9]*", ""))
  • 逻辑:将字符串中开头到第一个数字前的所有内容替换为空,直接得到从数字开始的完整后续内容。

结果验证

执行上述命令后,你会得到两个新变量:

  • drug_name:存储纯药物名称(如NITROFURANTOIN MACROCRYSTAL、ACETAMINOPHEN)
  • dosage:存储剂量+单位(如100 MG、500 MG/5 ML)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:03:24