I would use TRANSLATE() instead of COMPRESS() to get rid of the characters you don't want. That will reduce the risk of forming a number from separate digit strings in the string. But probably remove the commas so strings like 1,234,567 will be recognized.
data have;
input string $32. ;
cards;
2.8
25
Slight
>=60
0.3
4.56E2
Moderate
37
Marked
7.0000000000000007-2
1,230
+45
-3
100-200
34>56
;
data want;
set have;
clean=left(translate(compress(string,','),' ',compress(string,'+-. E','d')));
number=input(clean,??32.);
run;
proc print;
run;
Result
Obs string clean number
1 2.8 2.8 2.8
2 25 25 25.0
3 Slight .
4 >=60 60 60.0
5 0.3 0.3 0.3
6 4.56E2 4.56E2 456.0
7 Moderate .
8 37 37 37.0
9 Marked .
10 7.0000000000000007-2 7.0000000000000007-2 .
11 1,230 1230 1230.0
12 +45 +45 45.0
13 -3 -3 -3.0
14 100-200 100-200 .
15 34>56 34 56 .
... View more