京公网安备 11010802034615号
经营许可证编号:京B2-20210330
sas正则式之prxparen
今天还是要继续正则式的内容,这周的内容是prxparen函数,这个函数我个人觉得特别有用,是因为他和“|”结合使用可以同时容纳很多种情况的字符串。
prxparse这个函数没有什么参数,就是填入prxparse正则式的字符返回对应的是praparse的哪一部分。我现在说你肯定很懵逼,来,我们举个栗子!
re=prxparse("/(one)|(two)|(three)/")
position=prxmatch(re,string)
|
就是这么说prxparse("/(one)|(two)|(three)/")搜索字符函数中/(one)|(two)|(three)/ 用“|”分开了三个即将要搜索的字符,即‘’one”为第一个搜索字符,一旦在字符中发现“one”了就返回1,假设第一个发现的字符串是“three”就是返回3,所以返回刚才的例子就很容易理解了。
现在用一个小例子再介绍这个函数 data paren; if _n_=1 then pattern=prxparse("/(\d )|(\d\d )|(\d\d\d )/"); retain pattern; input string $char30.; position=prxmatch(pattern,string); if position gt 0 then which_paren=prxparen(pattern); datalines; one single digit 8 here two 888 77 12345 1234 123 12 1 ; run; 结果:
如图所示,position是函数prxmatch的返回结果,即字符的位置,which_paren是prxparen的返回结果,即对应的是字符搜索的哪一部分。if position gt 0 then which_paren=prxparen(pattern); 这里的if是为了确认是prxmatch搜索到位置的时候才判断字符是属于pattern的哪一部分。 现在用一个实际数据处理中的例子再深化这个函数。
这是一份领导给我的数据,可以看到数据上中文字符之后还有一些乱七八糟的英文啊符号啊数字啊,当时领导的需求是,把这份数据清洗出来变成只用字符的变量以及不要用类似“黄山分行”这种字眼的存在。所以当下就写了以下这段代码解决的这个需求。来,上代码! data ss; set dd; if _n_=1 then ret=prxparse("/(\D?\银行)|(\D?\金融)|(\D?\贷款)|(\D?\融资)|(\D?\保险)|(\D?\担保)|(\D?\信用[社合联])/"); retain ret; position=prxmatch(ret,QUERY_OPERATOR); if position gt 0 then which_posit=prxparen(ret); else which_posit=0; if which_posit gt 0 then do; call prxsubstr(ret,QUERY_OPERATOR,start,length); if start gt 0 and which_posit=1 then do; dd=substr(QUERY_OPERATOR,1,start)||"银行"; end; if start gt 0 and which_posit=2 then do; dd=substr(QUERY_OPERATOR,1,start)||"金融公司"; end; if start gt 0 and which_posit=3 then do; dd=substr(QUERY_OPERATOR,1,start)||"贷款公司"; end; if start gt 0 and which_posit=4 then do; dd=substr(QUERY_OPERATOR,1,start)||"融资有限公司"; end; if start gt 0 and which_posit=5 then do; dd=substr(QUERY_OPERATOR,1,start)||"保险有限公司"; end; if start gt 0 and which_posit=6 then do; dd=substr(QUERY_OPERATOR,1,start)||"担保公司"; end; if start gt 0 and which_posit=7 then do; dd=substr(QUERY_OPERATOR,1,start)||"农村信用合作社"; end; end; else dd='其他'; drop start length which_posit position ret; run; 结果:
现在单独取一个if语句的下的执行语句介绍一下: call prxsubstr(ret,QUERY_OPERATOR,start,length); if start gt 0 and which_posit=1 then do; dd=substr(QUERY_OPERATOR,1,start)||"银行"; end; call prxsubstr 在之前的文章中已经介绍过了,所以如果忘了,再翻一下。然后if start gt 0 and which_posit=1 then do ;这个语句中的which_posit=1 即就是搜索到“银行”两个字就是认定这个机构就是银行卡,然后就截取“银行”前面的那一串字,然后再接上“银行”两个字。这里你会问,问什么长度为什么用的是“start”这个变量,因为我们搜索的是”银行”两个字,所以返回的位置是银行的位置,但是我们需要的是“银行”前面的那一串字符,所以就使用start作为长度。数据分析师培训 |
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
主讲人简介 张冲,海归统计学硕士,CDA 认证数据分析师,前云南白药集团资深数据分析师,自媒体 Python 讲师,全网课程播放量破 ...
2026-04-10在数据可视化与业务分析中,同比分析是衡量业务发展趋势、识别周期波动的核心手段,其核心逻辑是将当前周期数据与上年同期数据进 ...
2026-04-10在机器学习模型的落地应用中,预测精度并非衡量模型可靠性的唯一标准,不确定性分析同样不可或缺。尤其是在医疗诊断、自动驾驶、 ...
2026-04-10数据本身是沉默的,唯有通过有效的呈现方式,才能让其背后的规律、趋势与价值被看见、被理解、被运用。统计制图(数据可视化)作 ...
2026-04-10在全球化深度发展的今天,跨文化传播已成为连接不同文明、促进多元共生的核心纽带,其研究核心围绕“信息传递、文化解读、意义建 ...
2026-04-09在数据可视化领域,折线图是展示时序数据、趋势变化的核心图表类型之一,其简洁的线条的能够清晰呈现数据的起伏规律。Python ECh ...
2026-04-09在数据驱动的时代,数据分析早已不是“凭经验、靠感觉”的零散操作,而是一套具备固定逻辑、标准化流程的系统方法——这就是数据 ...
2026-04-09长短期记忆网络(LSTM)作为循环神经网络(RNN)的重要改进模型,凭借其独特的门控机制(遗忘门、输入门、输出门),有效解决了 ...
2026-04-08在数据分析全流程中,数据质量是决定分析结论可靠性的核心前提,而异常值作为数据集中的“异类”,往往会干扰统计检验、模型训练 ...
2026-04-08在数字经济飞速发展的今天,数据已渗透到各行各业的核心场景,成为解读趋势、优化决策、创造价值的核心载体。而数据分析,作为挖 ...
2026-04-08在数据分析全流程中,数据处理是基础,图形可视化是核心呈现手段——前者负责将杂乱无章的原始数据转化为干净、规范、可分析的格 ...
2026-04-07在数据分析与统计推断中,p值是衡量假设检验结果显著性的核心指标,其本质是在原假设(通常为“无效应”“无差异”)成立的前提 ...
2026-04-07在数字经济深度渗透的今天,数据已成为企业生存发展的核心资产,企业的竞争本质已转变为数据利用能力的竞争。然而,大量来自生产 ...
2026-04-07Python凭借简洁的语法、丰富的生态库,成为算法开发、数据处理、机器学习等领域的首选语言。但受限于动态类型、解释性执行的特性 ...
2026-04-03在深度学习神经网络中,卷积操作是实现数据特征提取的核心引擎,更是让模型“看懂”数据、“解读”数据的关键所在。不同于传统机 ...
2026-04-03当数字化转型从企业的“战略口号”落地为“生存之战”,越来越多的企业意识到,转型的核心并非技术的堆砌,而是数据价值的深度挖 ...
2026-04-03在日常办公数据分析中,数据透视表凭借高效的汇总、分组功能,成为Excel、WPS等办公软件中最常用的数据分析工具之一。其中,“计 ...
2026-04-02在数字化交互的全场景中,用户的每一次操作都在生成动态的行为轨迹——电商用户的“浏览商品→点击详情→加入购物车”,内容APP ...
2026-04-02在数字化转型深度推进的今天,企业数据已成为驱动业务增长、构建核心竞争力的战略资产,而数据安全则是守护这份资产的“生命线” ...
2026-04-02在数据驱动决策的浪潮中,数据挖掘与数据分析是两个高频出现且极易被混淆的概念。有人将二者等同看待,认为“做数据分析就是做数 ...
2026-04-01