This runs with DFSORT and works with that product.
If you want to know what it is doing, look at the second step, which is the same thing but coded with DFSORT symbols.
//SPLITPL EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=INIT,
PARSE=(%01=(STARTAT=C'+',FIXLEN=1),
%02=(STARTAT=C'+',FIXLEN=1)),
OVERLAY=(81:%01,%02))
OUTFIL FILES=01,INCLUDE=(81,2,CH,EQ,C' '),
BUILD=(1,80)
OUTFIL FILES=02,INCLUDE=(81,2,CH,EQ,C'+ '),
BUILD=(1,80)
OUTFIL FILES=03,INCLUDE=(81,2,CH,EQ,C'++'),
BUILD=(1,80)
/*
//SORTOF01 DD SYSOUT=*
//SORTOF02 DD SYSOUT=*
//SORTOF03 DD SYSOUT=*
//SORTIN DD *
++++
+++
++
+
-
//SPLITPLS EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SYMNOUT DD SYSOUT=*
//SYMNAMES DD *
INPUT-RECORD,1,80
FIRST-BYTE-AFTER-INPUT-RECORD,*,1,CH
EXTENDED-TEST-FOR-PLUS,=,2,CH
FIRST-PLUS-IF-PRESENT-ELSE-BLANK,%01
SECOND-PLUS-IF-PRESENT-ELSE-BLANK,%02
NO-PLUSSES,C' '
ONE-PLUS,C'+ '
TWO-OR-MORE-PLUSSES,C'++'
//SYSIN DD *
OPTION COPY
INREC IFTHEN=(WHEN=INIT,
PARSE=(FIRST-PLUS-IF-PRESENT-ELSE-BLANK=(STARTAT=C'+',FIXLEN=1),
SECOND-PLUS-IF-PRESENT-ELSE-BLANK=(STARTAT=C'+',FIXLEN=1)),
OVERLAY=(FIRST-BYTE-AFTER-INPUT-RECORD:
FIRST-PLUS-IF-PRESENT-ELSE-BLANK,
SECOND-PLUS-IF-PRESENT-ELSE-BLANK))
OUTFIL FILES=01,INCLUDE=(EXTENDED-TEST-FOR-PLUS,
EQ,NO-PLUSSES),
BUILD=(INPUT-RECORD)
OUTFIL FILES=02,INCLUDE=(EXTENDED-TEST-FOR-PLUS,
EQ,ONE-PLUS),
BUILD=(INPUT-RECORD)
OUTFIL FILES=03,INCLUDE=(EXTENDED-TEST-FOR-PLUS,
EQ,TWO-OR-MORE-PLUSSES),
BUILD=(INPUT-RECORD)
/*
//SORTOF01 DD SYSOUT=*
//SORTOF02 DD SYSOUT=*
//SORTOF03 DD SYSOUT=*
//SORTIN DD *
++++
+++
++
+
-