It is unclear from your description whether you want the ATTRIBUTES records in the output. You don't say you don't, but they would have the same destructive effect next time you run the job, if kept.
If you file is as simple as that, and will remain so, then you can retain the idea of the SUM but avoid the SORT by using MERGE with a single SORTIN01 DD.
If your file, or your processing, is more complicated, you could have a look at http://ibmmainframes.com/about60582.html
If your SyncSort was just a little more up-to-date you'd have access to JNFnCNTL files, and you could look at a JOINKEYS solution (follow the links for an example). SyncSort do provide a patch to allow JNFnCNTL for 1.4.0, so as a longer term thing, it would be useful to arrange for that.
Without JOINKEYS, the other solution is possible for you.
The idea is to arrange that each record ends up also containing the data from the previous record. The way you pass data from one record to another is WHEN=GROUP with PUSH. If you just PUSH for every record, you'll have the extra data overwritten before you can use it. So, for alternate records, the entire record is PUSHed into different locations.
For your case, you will then be interested in looking at the "record after". If that record is not ATTRIBUTES, output the correct stored record.
If you do not have a trailer on the file, you will need to create a dummy one. This is done in a simple SORT step prior to this, which has the same file for SORTIN but which will only process the first record.
INREC OVERLAY=(C'TRAILER DUMMY')
Give that SORTOUT a DSN.
You then have a dummy trailer, which has the same attributes as your input file on SORTIN, which you can simply concatenate to your actual input on SORTIN.
When you identify TRAILER DUMMY in your code (or whatever actual trailer identifier, if you have one) you output a record if it is not ATTRIBUTES.