如何在SAS中使用包含匹配功能删除含指定关键词的项目名称观测
你现有的代码有两个核心问题:
- 漏写了
set before;语句,SAS无法读取原始数据集,会直接生成空数据集 FIND函数一次仅支持搜索单个目标字符串,你把第二个搜索词填到了第三个参数位(该参数位仅接受控制匹配规则的修饰符,比如i代表不区分大小写),所以才会把"workshop"的每个字符都当成无效修饰符抛出警告。
推荐实现方式
方式1:连用FIND函数(适合少量关键词场景)
两个FIND函数用OR逻辑连接,分别匹配两个关键词即可:
data want; set before; /* 加i修饰符表示不区分大小写,不需要可删除 */ if find(projectname, "seminar", "i") or find(projectname, "workshop", "i") then delete; run;
方式2:PRXMATCH正则匹配(适合关键词较多的场景)
用正则表达式可以一次性匹配多个关键词,后续新增关键词只需在正则里用|分隔追加即可:
data want; set before; /* 正则语法:/关键词1|关键词2|关键词n/修饰符 */ if prxmatch("/seminar|workshop/i", projectname) then delete; run;
补充说明
- FIND/PRXMATCH函数未匹配到目标时返回值为0,SAS逻辑判断中0为假、非0为真,所以无需额外写
>0判断 - 如果你需要严格区分大小写匹配,删除上述代码里的修饰符
i即可 - 上述代码生成新数据集
want保留处理后的结果,不会覆盖原始before数据集,避免误操作丢失原始数据,如果需要直接覆盖可以把第一行改成data before;
内容的提问来源于stack exchange,提问作者Mkrogen
相关产品推荐
相关产品推荐

