AKDEARAGON,
As Bill explained earlier, you need to use code tags to be able to see how the spacing is retained. Frank added the code tags for you. In future make sure to enclose the data/jcl in code tags.
Anyway since your input has both missing dates as well as left justified dates you need to do double parsing.
1. parse and get the values and put the date fields at the end of the file in fixed positions. I assumed input is FB 80 byes , so I added the date fields at the end at pos 81,91,101
2. Now parse again the date fields specifying the positions looking for separators and build the entire record as needed.
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
X.X..8/23/2010.10.5/20/2011.7
X.X..8/24/2010.10.5/26/2011.7
X.X..4/28/2011.1.4/29/2011.7
X.X.12/1/2012.10/5/2011.2.11/9/2011.8
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
INREC IFTHEN=(WHEN=INIT,
PARSE=(%01=(ENDBEFR=X'05',FIXLEN=1), $ VALUE-1
%02=(ENDBEFR=X'05',FIXLEN=1), $ VALUE-2
%03=(ENDBEFR=X'05',FIXLEN=10), $ DATE-1
%04=(ENDBEFR=X'05',FIXLEN=10), $ DATE-2
%05=(ENDBEFR=X'05',FIXLEN=02), $ VALUE-3
%06=(ENDBEFR=X'05',FIXLEN=10), $ DATE-3
%07=(ENDBEFR=X'05',FIXLEN=01)), $ VALUE-4
OVERLAY=(81:%03,%04,%06)),
IFTHEN=(WHEN=INIT,
PARSE=(%08=(ABSPOS=81,ENDBEFR=C'/',ENDBEFR=C' ',FIXLEN=2),
%09=(ENDBEFR=C'/',ENDBEFR=C' ',FIXLEN=2),
%10=(FIXLEN=4),
%11=(ABSPOS=91,ENDBEFR=C'/',ENDBEFR=C' ',FIXLEN=2),
%12=(ENDBEFR=C'/',ENDBEFR=C' ',FIXLEN=2),
%13=(FIXLEN=4),
%14=(ABSPOS=101,ENDBEFR=C'/',ENDBEFR=C' ',FIXLEN=2),
%15=(ENDBEFR=C'/',FIXLEN=2),
%16=(FIXLEN=4)),
BUILD=(%01, $ VALUE-1
%02, $ VALUE-2
%10,UFF,EDIT=(TTTT), $ DATE-1-CCYY
%08,UFF,EDIT=(TT), $ DATE-1-MM
%09,UFF,EDIT=(TT), $ DATE-1-DD
%13,UFF,EDIT=(TTTT), $ DATE-2-CCYY
%11,UFF,EDIT=(TT), $ DATE-2-MM
%12,UFF,EDIT=(TT), $ DATE-2-DD
%05,UFF,EDIT=(TT), $ VALUE-3
%16,UFF,EDIT=(TTTT), $ DATE-3-CCYY
%14,UFF,EDIT=(TT), $ DATE-3-MM
%15,UFF,EDIT=(TT), $ DATE-3-DD
%07,UFF,EDIT=(TT))) $ VALUE-4
//*