如何按首个数字字符解析字符串变量以拆分药名与剂量?
在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
相关产品推荐
相关产品推荐

