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

技术问询:如何从变量及SAS文件wildfire_narrative的文本中提取烧毁英亩数?

从SAS的wildfire_narrative文件中提取烧毁的英亩数方案

嘿,针对你要从wildfire_narrative文件的episode_narrative变量里提取烧毁英亩数的需求,我整理了两种实用的SAS实现方法,帮你搞定这个文本提取问题:

方法一:单次提取(假设每个文本段落只有一组英亩数)

如果你的episode_narrative里每个记录只包含一组烧毁英亩数,用正则表达式配合SAS的PRXMATCH和PRXCHANGE函数就能快速提取:

data wildfire_acres;
    set wildfire_narrative;
    * 定义正则表达式:匹配带逗号的数字(或纯数字)+ 英亩的模式;
    pattern = prxparse('/(\d{1,3}(?:,\d{3})*)英亩/');
    if prxmatch(pattern, episode_narrative) then do;
        * 提取匹配到的数字+英亩字符串,再去掉“英亩”和逗号;
        acres_char = prxchange('s/(\d{1,3}(?:,\d{3})*)英亩/$1/', 1, episode_narrative);
        acres_num = input(compress(acres_char, ','), best12.); * 转成数值型变量;
    end;
    drop pattern acres_char;
run;

代码解释:

  • 正则表达式/(\d{1,3}(?:,\d{3})*)英亩/专门匹配类似10,353英亩或1234英亩的内容,括号里的部分就是我们要提取的数字部分
  • PRXCHANGE用来替换掉“英亩”字样,只保留数字字符串
  • compress(acres_char, ',')去掉数字里的逗号,再用input转成数值型,方便后续分析

方法二:循环提取(处理文本中有多组英亩数的情况)

如果有的episode_narrative段落里提到了多组英亩数(比如不同阶段的烧毁面积),可以用PRXNEXT循环遍历所有匹配结果:

data wildfire_acres_multi;
    set wildfire_narrative;
    length acres_char $20;
    pattern = prxparse('/(\d{1,3}(?:,\d{3})*)英亩/');
    start = 1;
    stop = length(episode_narrative);
    * 循环查找所有匹配的英亩数;
    do while(prxnext(pattern, start, stop, episode_narrative, pos, len));
        acres_char = substr(episode_narrative, pos, len);
        acres_num = input(compress(acres_char, ',英亩'), best12.);
        output; * 每个匹配结果输出一条记录;
        start = pos + len;
    end;
    drop pattern start stop pos len acres_char;
run;

注意事项:

  • 如果文本里有“约XX英亩”“近XX英亩”这类前缀,可以把正则表达式调整为/(约|近)?(\d{1,3}(?:,\d{3})*)英亩/,按需提取前缀和数字
  • 建议先抽样查看episode_narrative的文本格式,调整正则表达式的匹配规则,确保覆盖所有可能的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:43:47