Hi:
Every PROC call -will- generate an entry in the TOC -- unless you take other measures like CONTENTS= to deal with it. I am surprised that CONTENTS= doesn't work for ODS HTML when you're also using ODS LAYOUT. This is a question to pursue with Tech Support.
There are template methods to suppress TOC entries. What you might try is using ODS HTML3 (HTML 3.2 tags) instead of ODS HTML (HTML 4.0 tags) and see whether the HTML is different. ODS HTML3 is the original destination and it's possible that it might work different.
Another place where you have a chance to impact the output (for ODS HTML) is to modify the tagset template (tagsets.html4) that actually -generates- the TOC file. You could alter the events that are writing to the TOC file and change so that ONLY the BODY events wrote to the TOC file instead of the PROC events. This is not a trivial undertaking -- so it wouldn't be my first choice to try.
Other than that, there might be a chance that ODS DOCUMENT and PROC DOCUMENT would allow you to build the TOC structure you want. The catch here is ODS LAYOUT -- I don't know how/whether the ODS LAYOUT statements will go into the document store -- again -- this is a question for Tech Support.
And, of course, there's always the DATA step method. If you are happy with the FRAME and BODY files and your only issue is with the CONTENTS file, you can always wait until the "big" step is done and then write over the CONTENTS= file with a file of your own that has the links you want. By the time your macro is over, you should know the name of each BODY= file. The HTML that you need for the TOC is very straightforward. This would have to be the very LAST step -- after everything else is done and the "bad" CONTENTS= file was closed. Then you could write your own HTML CONTENTS= file to subsitute instead of the "bad" one.
cynthia