Преобразование комментария @Zachary Haber в код.
Сначала преобразуйте текст в фактический набор данных SAS.
data have;
input string $80.;
cards;
SOLAR MARS T-1500S TURBINE (13,300-BHP, NG, CENTRIFUGAL)
13-A, C-B, 1350 HP, NATURAL GAS COMPRESSOR ENGINE
3,000HP KVT-512 ENGINE
Engine 1, Caterpillar G3512 TALE : Emission Point:
DRESSER RAND - 2SLB ENGINE 1 RATED AT 3,200 BHP
Clark Engine #1 - 1550 HP natural gas-fired SI 2SLB
E1 - s/n WPW-01669 JJJJ
;
Теперь прочитайте этот набор данных и используйте CALL PRXNEXT (), чтобы найти первый матч Добавлен код для преобразования результата в число.
data want;
set have;
if _n_=1 then regexid = prxparse('(\d+(,\d+)*[ -]*?B?HP)');
retain regexid;
drop regexid;
length want $40;
start=1;
stop=length(string);
call prxnext(regexid,start,stop,string,position,len);
want=substrn(string,position,len);
HP = input(compress(want,',- BHP'),??32.);
run;
Результат:
Obs want HP string
1 13,300-BHP 13300 SOLAR MARS T-1500S TURBINE (13,300-BHP, NG, CENTRIFUGAL)
2 1350 HP 1350 13-A, C-B, 1350 HP, NATURAL GAS COMPRESSOR ENGINE
3 3,000HP 3000 3,000HP KVT-512 ENGINE
4 . Engine 1, Caterpillar G3512 TALE : Emission Point:
5 3,200 BHP 3200 DRESSER RAND - 2SLB ENGINE 1 RATED AT 3,200 BHP
6 1550 HP 1550 Clark Engine #1 - 1550 HP natural gas-fired SI 2SLB
7 . E1 - s/n WPW-01669 JJJJ