Perhaps someone can figure out a regular expression for this, but for now why not just parse the sting into words and then re-build it using the words you want to keep.
data have;
input str $80.;
cards;
Value TEST - Group HS M228S Level 7 on SUPGRPPRF
Value TEST - Group HS M228S Level 6 - LF on SUPGRPPRF
Value TEST - Group HS M228S Level 6 - LF on GRP
Value TEST - Group HS M228S Level 6 - LF on GRP
Value TEST - Group HS M228S Level 6 - LF on GRP
Value TEST - Group HS M228S on SSGRP
Value TEST - Group HS M228S on SSGRP
;
data want ;
set have;
length new $80;
do i=4 to countw(str,' ')-2; new=catx(' ',new,scan(str,i,' ')); end;
drop i;
run;
proc print width=min;
run;