Как извлечь, рассчитать и вернуть числа в грязном тексте? - PullRequest
0 голосов
/ 09 апреля 2019

Это более быстрый вопрос.
Есть грязный текст, который является определением имени таблицы, все, что мне нужно, это получить номер каждой таблицы плюс 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 семейных функций также приветствуются.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Используйте prxchange и tranwrd.

data want;
   set test;
   _x=tranwrd(x,strip(prxchange('s/.*(?<=\_)((\d+)).*/$1/',1,x)),strip(prxchange('s/.*(?<=\_)((\d+)).*/$1/',1,x)+15));
run;
1 голос
/ 09 апреля 2019

Вы можете получить некоторую идею из этого.

(%.*?-)(\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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...