首页 > 解决方案 > 如何提取、计算和返回杂乱文本中的数字?

问题描述

这是一个更快的问题。
有一个凌乱的文本是表名的定义,我想要的只是让每个表号加 15。

我认为 perl 正则表达式或左值substr()函数可能会有所帮助,但我没有那么熟练地解决它。

我将给出以下示例:

data test;
    input x $300. @@;
    datalines4;
    %let Tit_Tab5_15    =%NRSTR(Tab5-15 Cross-tabulation of blood routine results(SS) );
    %let Tit_Tab5_16    =%NRSTR(Tab5-16 Cross-tabulation of urine routine results(SS) );
    %let Tit_Tab5_17    =%NRSTR(Tab5-17 Cross-tabulation of blood chemistry results(SS) );
    %let Tit_Tab5_18    =%NRSTR(Tab5-18 Cross-tabulation of electrolyte results(SS) );
    %let Tit_Tab5_19    =%NRSTR(Tab5-19 Cross-tabulation of coagulation results(SS) );
    %let Tit_Tab5_20    =%NRSTR(Tab5-20 Cross-tabulation of blood lipid results(SS) );
;;;;
run;

输出应该是:

%let Tit_Tab5_30    =%NRSTR(Tab5-30 Cross-tabulation of blood routine results(SS) );
%let Tit_Tab5_31    =%NRSTR(Tab5-31 Cross-tabulation of urine routine results(SS) );
%let Tit_Tab5_32    =%NRSTR(Tab5-32 Cross-tabulation of blood chemistry results(SS) );
%let Tit_Tab5_33    =%NRSTR(Tab5-33 Cross-tabulation of electrolyte results(SS) );
%let Tit_Tab5_34    =%NRSTR(Tab5-34 Cross-tabulation of coagulation results(SS) );
%let Tit_Tab5_35    =%NRSTR(Tab5-35 Cross-tabulation of blood lipid results(SS) );

请注意,部分的数量(紧跟在单词后面的数字Tab)不应改变。

不使用prx家庭功能的解决方案也受到欢迎。

标签: regexsas

解决方案


你可能会从中得到一些想法。

(%.*?-)(\d+)(.*;)



 Match 1
1.  %let Tit_Tab5_15 =%NRSTR(Tab5-
2.  15
3.  Cross-tabulation of blood routine results(SS) );
Match 2
1.  %let Tit_Tab5_16 =%NRSTR(Tab5-
2.  16
3.  Cross-tabulation of urine routine results(SS) );
Match 3
1.  %let Tit_Tab5_17 =%NRSTR(Tab5-
2.  17
3.  Cross-tabulation of blood chemistry results(SS) );
Match 4
1.  %let Tit_Tab5_18 =%NRSTR(Tab5-
2.  18
3.  Cross-tabulation of electrolyte results(SS) );
Match 5
1.  %let Tit_Tab5_19 =%NRSTR(Tab5-
2.  19
3.  Cross-tabulation of coagulation results(SS) );
Match 6
1.  %let Tit_Tab5_20 =%NRSTR(Tab5-
2.  20
3.  Cross-tabulation of blood lipid results(SS) );

在每场比赛中获取第 2 组的值添加“15”然后替换它。

https://rubular.com/r/HPQAetIFcfGOHD


推荐阅读