<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Struggling with Styles in ODS and Base Reporting</title>
    <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128280#M10659</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi:&lt;/P&gt;&lt;P&gt;&amp;nbsp; I'm not sure where to start. So let me start where I think the beginning is.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; LISTING or a "plain" text file was the first and ONLY output that SAS could produce for a long, long time. LISTING output was generally printed on a physical device (printer) that had a fixed pitch (or monospace) font and, so, achieving the "modern" look of proportional fonts was just not possible in LISTING output. So distinguishing one line on a report from the other by lines of dashes or equal signs was the only way to call attention to a break line. The LISTING output (what started as a "plain" text file) became known as "monospace" output when fancy printers with proportional fonts became available. When ODS was introduced, the LISTING output became known as the LISTING destination and/or traditional "monospace" output or the traditional "monospace" destination.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; At any rate, options that developed over the years, which were designed to work in an EBCDIC (the really old days) or ASCII text file on ALL platforms, are just not appropriate options for the varying result types such as HTML, RTF, PDF, CSV, LaTeX and other ways of presenting output when you use ODS (starting with SAS version 7).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; So, while I do understand your frustration, in the documentation, for example on the SKIP option of the BREAK statement DOES say (on the line for Restriction) that:&lt;/P&gt;&lt;P&gt;&lt;A class="active_link" href="http://support.sas.com/documentation/cdl/en/proc/63079/HTML/default/viewer.htm#p16uti3vzgml7gn1nt3ov7cqxf9i.htm"&gt;http://support.sas.com/documentation/cdl/en/proc/63079/HTML/default/viewer.htm#p16uti3vzgml7gn1nt3ov7cqxf9i.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;"SKIP &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN class="restriction"&gt;&amp;nbsp; Restriction: &lt;/SPAN&gt;This option has no effect on ODS destinations other than traditional SAS monospace output."&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; Any PROC REPORT option that ONLY works in LISTING will have the same type of restriction documented. And, as I pointed out, the "workarounds" have been known and published for a long time. When you use SKIP, for an ODS destination, should PROC REPORT insert an automatic COMPUTE block into your code? I don't think so. And here's my opinion why not: There are a LOT of "older" PROC REPORT options that only work in LISTING. The fix for skip is straightforward, but is about the only workaround that is simple and would work in any destination. All the other workarounds for LISTING only options are either more complicated or don't work in all destinations. I think of it in terms of my mom's advice: If you don't have enough candy for everybody, don't bring candy to the party. Meaning that if PROC REPORT fixes for LISTING options are like the candy, and if there isn't a straightforward fix for every option, it's better, in the long run, to show the fixes and let folks use them as needed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; About where you would see TEXTDECORATION:&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;TEXTDECORATION is a style attribute and appears in the documentation under the topic "Detailed Information for All Style Attributes" (9.3) or "Style Attributes and their Values" (9.2),&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/odsug/62755/HTML/default/viewer.htm#n19a4b40swc766n18qczor47r08f.htm"&gt;http://support.sas.com/documentation/cdl/en/odsug/62755/HTML/default/viewer.htm#n19a4b40swc766n18qczor47r08f.htm&lt;/A&gt; (9.3 doc)&lt;/P&gt;&lt;P&gt;TEXTDECORATION is not used, by default, in a style template, so you would only have found it in the documentation (as noted above), displaying the style template code would not have told you anything about TEXTDECORATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;In the topic, you will see the list of all the STYLE ATTRIBUTES that are available for usage for tables that you create with SAS. Usually, you use these STYLE ATTRIBUTES in one of two ways:&lt;/P&gt;&lt;P&gt;1) inside a STYLE= override for PRINT, REPORT or TABULATE (such as I show with PROC REPORT in the previous example or the one below)&lt;/P&gt;&lt;P&gt;or&lt;/P&gt;&lt;P&gt;2) inside a STYLE template (such as described in my paper on using STYLE templates: &lt;A href="http://support.sas.com/resources/papers/proceedings10/033-2010.pdf" title="http://support.sas.com/resources/papers/proceedings10/033-2010.pdf"&gt;http://support.sas.com/resources/papers/proceedings10/033-2010.pdf&lt;/A&gt; ) Inside a style template, a list of style attributes "belongs" to a style element (a style element is a piece of a report -- like SystemTitle or Header or Data cells or SystemFooter). This scheme -- where a style template is a collection of style element definitions and a style element definition is a collection of style attribute definitions-- is very elegant (in my opinion). It allows the SystemTitle to have one font and fontweight and fontsize that is different from the Header cell font, fontweight and fontsize and is also different from the Data cell font, fontweight and fontsize and is different from the By line font, fontweight and fontsize, etc, etc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; In my earlier post, I explained about the JOURNAL style when I said:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;"When I use the code below with TEXTDECORATION to do the OVERLINE,&lt;SPAN style="text-decoration: underline;"&gt; I had to also use the JOURNAL style&lt;/SPAN&gt; &lt;SPAN style="text-decoration: underline;"&gt;to remove the interior table lines&lt;/SPAN&gt;,&lt;SPAN style="text-decoration: underline;"&gt; so the OVERLINE would be visible."&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Anyway, I did not say or mean to imply that &lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;you&lt;/STRONG&gt;&lt;/SPAN&gt; had to use JOURNAL style as your base style. I said that &lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;I&lt;/STRONG&gt;&lt;/SPAN&gt; used it to show you the appearance of the TEXTDECORATION lines. If I had coded the example using the default PDF style, then the interior table lines that normally are used for PDF report tables would have looked weird with the OVERLINE (again, in my opinion). But, in all honesty, I wouldn't use TEXTDECORATION=OVERLINE to make the summary lines distinctive; my usual method to highlight the summary lines (from BREAK and RBREAK) is to make them the same style as the HEADER cells (shown below).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;PROC TEMPLATE can access many different types of templates. To see what is inside various item stores or template stores, you need to use more precise syntax to see the entire list of STYLE definitions that are available to you. In this paper: &lt;A href="http://support.sas.com/resources/papers/proceedings09/227-2009.pdf" title="http://support.sas.com/resources/papers/proceedings09/227-2009.pdf"&gt;http://support.sas.com/resources/papers/proceedings09/227-2009.pdf&lt;/A&gt; on page 2 look at the code for Example 2. To see the JOURNAL style existed, you would have had to use LIST STYLES; in your PROC TEMPLATE code. However, unless you are up for reading PROC TEMPLATE code, you can use the STYLE=JOURNAL option in your ODS invocation in order to see the actual output that is created. Doing a simple LIST with PROC TEMPLATE will not reveal the full code for a style template definition. You would have had to use a SOURCE statement in PROC TEMPLATE to see all the possible style attributes that were used in a template.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Alternately, since you are using EG, you could also review the overall "look and feel" of a SAS pre-defined style template by opening the EG Style Wizard, where you could browse a "local" copy (CSS version) of the most common styles. Normally JOURNAL style is one of the styles that folks use when they want mostly border and line-free black and white output that looks like the kind of tables published in journals.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Back to EG -- there are some ODS basics that EG protects you from needing to know about. For example, EG automatically inserts ODS statements around any SAS code that is generated by your project. And, yes, by default, when you look at a library in EG, only data sets are shown to you. This is part of EG's basic design and underlying assumptions that folks using EG largely did not want to worry about the "details" of submitting a job or seeing any of the SAS catalogs or item stores that were needed or any of the ancillary code that was needed to submit a job in batch. When you look at the SAS log for your project or task, you should see quite a bit "added" code -- that is what EG does automatically for you. But batch syntax for PROC TEMPLATE or PROC CATALOG should still work for you to reveal the SAS files that are not data sets in your libraries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;In this paper, called The Greatest Hits: ODS Essentials Every User Should Know,&lt;BR /&gt; &lt;A href="http://support.sas.com/resources/papers/proceedings11/300-2011.pdf" title="http://support.sas.com/resources/papers/proceedings11/300-2011.pdf"&gt;http://support.sas.com/resources/papers/proceedings11/300-2011.pdf&lt;/A&gt; I cover some of the basics of ODS "essentials" and "hit #8" starting on page 21 is the one all about styles (ALL about styles).&lt;/P&gt;&lt;P&gt;If you want to watch a movie of the paper presentation, there is an SGF "Take-out" video on Brainshark, you can find the video here: &lt;A href="http://my.brainshark.com/ODS-Greatest-Hits-158359784" title="http://my.brainshark.com/ODS-Greatest-Hits-158359784"&gt;http://my.brainshark.com/ODS-Greatest-Hits-158359784&lt;/A&gt; and the first 6 minutes are ODS "intro" basics and then the "greatest hits" start at about slide 8 (since the audio is attached to each slide).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;ODS is not point and click. Using ODS and specifying ODS options or a custom style or changing a style or specifying a style override -- all of those changes are largely code-based changes, except for the few things you can select in the EG options.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Perhaps the days of programmers writing programs using a particular syntax are over and now we have analysts pointing and clicking their way to analytic reports without ever seeing code. But for results that go "beyond" the defaults, I have always needed to know how to write or modify SAS programs. The way you apply a style to an HTML table is different from the way you apply style to an RTF table or a PDF table or a LaTeX table -- so there has to be one way in SAS to have an impact on such varying types of output -- style templates or style definitions is that way that happens. I'm glad I don't have to know the ins and outs of RTF or PDF or HTML in order to produce output with ODS -- I just have to learn how ODS works and then my output is created appropriately for whichever destination I want. (And some things work in one destination, but may not work the same way in another. This is not because SAS is being nasty or persnickety, but because of the fundamental nature of the different destinations. LISTING is not RTF. RTF is not HTML. HTML is not LISTING. PDF is not HTML. HTML is not PDF. PDF is not LISTING. etc, etc.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From my standpoint, having coded in Fortran, COBOL, a little PL1, Basic and a few other languages, I think SAS is much more simplfied as a language (in my opinion). It's not object-oriented, like Java or C++ (although if you like object-oriented, SAS has that too). I guess it depends on where you started. From where I started, SAS seems simple and Java and C++ seem arcane and like magic to me. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;I don't know what customizations you need to do to the PDF TOC -- a LOT can be done with ODS PROCLABEL and with the CONTENTS= option without needing ODS DOCUMENT at all. But, if you need to either replay or rearrange items in the TOC, then ODS DOCUMENT is appropriate. I've put an example of using ODS PROCLABEL and CONTENTS= below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyway, one of my PROC REPORT steps has 2 nodes, the top-level node in the TOC and then just 1 subordinate node. Those lower level nodes were controlled with CONTENTS= options. The second PROC REPORT step just shows the top-level node being used. There are no lower level nodes for the second PROC REPORT. I don't know what you want to achieve. If your requirement only involves renaming or removing nodes, you might not need ODS DOCUMENT. If your requirement is to add nodes or rearrange the output objects, then you probably will need ODS DOCUMENT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cynthia&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;options nodate nonumber center orientation=portrait;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;title; footnote;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;data shoes;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; set sashelp.shoes;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; where region in ('Asia', 'Pacific');&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; ** need "fake" brkvar to change TOC node to something;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; ** other than "Table 1" in PDF TOC;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; brkvar = 1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods document name=work.shoes(write);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf file='c:\temp\proclabel_contents_techniques.pdf';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ODS PROCLABEL='Product Summary by Region';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** this proc report shows how to name the proc report;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** node something other than "Table 1";&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc report data=shoes nowd contents='';&amp;nbsp; /* quote-quote no space in between */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; column&amp;nbsp; brkvar region product ('Totals' sales inventory returns);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define brkvar / group noprint;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define region / group;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define product / group ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define sales / 'Sales' sum format=comma12. ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define inventory / 'Inventory' sum format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define returns / 'Returns' sum format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break after region / summarize style=Header{font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break before brkvar/ contents="Totals" page;&amp;nbsp; /* using brkvar to put string into TOC */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after region / style={background=white foreground=white};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; line ' ';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; rbreak after /summarize style=Header{color=purple font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; region='Grand Total';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ODS PROCLABEL='Product Averages by Region';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** this PROC REPORT suppresses all the TOC nodes created;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** by PROC REPORT and only keeps the PROCLABEL string in the TOC;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc report data=shoes nowd contents='';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; column brkvar region product ('Averages' sales inventory returns);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define brkvar / group noprint;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define region / group;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define product / group ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define sales / 'Sales' mean format=comma12. ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define inventory / 'Inventory' mean format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define returns / 'Returns' mean format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break after region / summarize style=Header{font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break before brkvar/ contents="" page; /* using quote-quote to suppress lower level node */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after region / style={background=white foreground=white};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; line ' ';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; rbreak after /summarize style=Header{color=purple font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; region='Grand Total';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods _all_ close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods document close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** now replay the document;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** but if the above PDF is OK, may not need this step;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf file='c:\temp\replay_shoes.pdf';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc document name=work.shoes;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; replay;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 29 May 2012 21:31:12 GMT</pubDate>
    <dc:creator>Cynthia_sas</dc:creator>
    <dc:date>2012-05-29T21:31:12Z</dc:date>
    <item>
      <title>Struggling with Styles</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128276#M10655</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have been reading the documentation for ODS, and struggling with using styles with Proc Report for a few days now.&lt;/P&gt;&lt;P&gt;So, HELP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I created a simple report:&lt;/P&gt;&lt;P&gt;&amp;lt;code&amp;gt;&lt;/P&gt;&lt;P&gt;proc report data=summarized;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; column basename filetype files size=total timeframe,size;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; define basename / group ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; define filetype / group ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; define files / analysis sum format=comma7. ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; define total / analysis sum format=bytes. ;&amp;nbsp;&amp;nbsp; * -- bytes is a predefined format by me ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; define timeframe / across ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; define size / analysis sum format=bytes. ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: Courier New;"&gt; &lt;/SPAN&gt;break after basename / ol summarize skip ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; rbreak after / dol summarize;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&amp;lt;/code&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But, when I put it into the ODS document system for later output into a PDF file,&lt;/P&gt;&lt;P&gt;It looses the overline, double overline, and skip.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, to get the "skip" back I have had to include:&lt;/P&gt;&lt;P&gt;&amp;lt;code&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; compute after basename ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; line ' ' ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; endcomp;&lt;/P&gt;&lt;P&gt;&amp;lt;/code&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But, I have been going nuts trying to change the border lines = borderbottomstyle and bordertopstyle&lt;/P&gt;&lt;P&gt;And the fonts, etc.&lt;/P&gt;&lt;P&gt;I wanted to use Proc Template to group all the customizations together, and that has been a disaster as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I can't seem even to take baby steps.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This shoud not be this hard.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: Courier New;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 May 2012 15:08:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128276#M10655</guid>
      <dc:creator>Chasville</dc:creator>
      <dc:date>2012-05-29T15:08:21Z</dc:date>
    </item>
    <item>
      <title>Re: Struggling with Styles</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128277#M10656</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi:&lt;/P&gt;&lt;P&gt;&amp;nbsp; Many of the options that you used (OL, DOL, SKIP, etc) are LISTING only options (also LISTING only options are PANEL, SPACING, BOX, FLOW, WIDTH, LS and PS). These LISTING options would be ignored by ODS whether you used ODS DOCUMENT or not. To prove this to yourself, you can try a simple program like this (without using ODS DOCUMENT):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;ods listing;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;title; footnote;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;options center nodate nonumber orientation=portrait;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;** Note how LISTING options will be ignored by PDF;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;** note also that the PDF output does NOT look like LISTING output;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;ods pdf file='c:\temp\no_list_techniques.pdf';&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;proc report data=sashelp.class nowd;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp; column&amp;nbsp; sex age height weight;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp; define sex / group f=$3.;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp; define age / group ;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp; define height / analysis sum format=comma7. ;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp; define weight / analysis sum format=comma7. ; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp; break after sex / ol summarize skip ;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;&amp;nbsp; rbreak after / dol summarize;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;STRONG&gt;ods _all_ close;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Now, if you compare the LISTING window output to the PDF file, you will see that LISTING techniques are ignored by PDF. The whole idea of overlining and underlining pieces of a report, like summary lines, has become sort of obsolete, since PDF, RTF and HTML all create report tables with very distinct interior table lines and you can use other techniques for highlighting summary rows other than a row of equal signs for double overlining or double underlining. (you can make the summary line bold, you can make it the same color as the header cells, you can change the color of the font or make the font italic or make the font bigger...)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; The technique that you used to introduce the equivalent of a SKIP into the output is the correct technique. Since SKIP was designed for LISTING there was no way that SKIP would have worked anywhere but LISTING. This Tech Support note (and many previous forum postings) explain this behavior:&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/kb/2/549.html" title="http://support.sas.com/kb/2/549.html"&gt;http://support.sas.com/kb/2/549.html&lt;/A&gt; (note that the date on this note is 2002 -- this behavior has been documented for quite a while)&lt;/P&gt;&lt;P&gt;and the workaround using style attributes for PDF and RTF is available as a Tech Support note: &lt;A class="active_link" href="http://support.sas.com/kb/42/743.html" title="http://support.sas.com/kb/42/743.html"&gt;http://support.sas.com/kb/42/743.html&lt;/A&gt; &lt;/P&gt;&lt;P&gt;and the workaround for other options is here as a Tech Support FAQ: &lt;A href="http://support.sas.com/rnd/base/ods/templateFAQ/report1.html" title="http://support.sas.com/rnd/base/ods/templateFAQ/report1.html"&gt;http://support.sas.com/rnd/base/ods/templateFAQ/report1.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; When I use the code below with TEXTDECORATION to do the OVERLINE, I had to also use the JOURNAL style to remove the interior table lines, so the OVERLINE would be visible. When I replayed the saved DOCUMENT, the overlines show up in the replayed PDF file.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cynthia&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** now, create a PDF document using PROC REPORT;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** with style= overrides for the break lines;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** and capture the output in an ODS DOCUMENT store;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing close;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods document name=work.doc(write);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf file='c:\temp\use_ods_techniques.pdf'&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style=journal;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc report data=sashelp.class nowd;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; column&amp;nbsp; sex age height weight;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define sex / group f=$3.;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define age / group ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define height / analysis sum format=comma7. ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define weight / analysis sum format=comma7. ;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break after sex / summarize style={textdecoration=overline};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after sex;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; line ' ';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; rbreak after /summarize style={textdecoration=overline};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods _all_ close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods document close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** now replay the document;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf file='c:\temp\replay_doc.pdf' style=journal;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc document name=work.doc;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; replay;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf close;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 May 2012 16:46:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128277#M10656</guid>
      <dc:creator>Cynthia_sas</dc:creator>
      <dc:date>2012-05-29T16:46:53Z</dc:date>
    </item>
    <item>
      <title>Re: Struggling with Styles</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128278#M10657</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A few quick thoughts.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. I would suggest instead of writing to ods document, write straight to a pdf file.&amp;nbsp; That will take any&amp;nbsp; document/replay issues out of the mix.&lt;/P&gt;&lt;P&gt;2. Try writing a simple ods pdf example, and see if you can get the formatting you want.&amp;nbsp; Write it around a sashelp dataset, so that you can post your example code with questions.&amp;nbsp; something like:&lt;/P&gt;&lt;PRE&gt;ods pdf file="d:\junk\mypdf.pdf";
proc report data=sashelp.shoes nowd;
&amp;nbsp; define region /group;
&amp;nbsp; break after region/ dol summarize;
run;
ods pdf close;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;3. I think the OL&amp;nbsp; DOL options only apply to the list (i.e. standard text) output. To get them into your pdf, you are correct that you need to use&amp;nbsp; ODS styles (either a template or in-line formatting.)&lt;/P&gt;&lt;P&gt;4. A great reference for ODS is "Output Delivery System: The&amp;nbsp; basics and behond" by Haworth, Zender &amp;amp; Burlew.&amp;nbsp; There are also lots of user group papers (lexjansen.com).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;HTH&lt;/P&gt;&lt;P&gt;--Q.&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 May 2012 16:48:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128278#M10657</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2012-05-29T16:48:40Z</dc:date>
    </item>
    <item>
      <title>Re: Struggling with Styles</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128279#M10658</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have to write to an ODS document first because I have to play around with the pathing to create the TOC correctly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was from the documentation that OL, etc. are "listing" only options.&lt;/P&gt;&lt;P&gt;I believe this limitation flies in the face of SAS simplifying programming as a 4GL when using ODS outputs.&amp;nbsp; The "skip" should still work, SAS should simply interpret it as a "compute ... endcompute;" option for us.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I never saw "textdecoration" in any of the SAS documentation I have read through for the past three days in relationship to proc report, ODS and styles.&lt;/P&gt;&lt;P&gt;It never even showed up in the proc template list=all&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Where did "Journal" come from? and why would I have to use that "style" as my base?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is too hard/convoluted and arcane.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, I am using EG and batch SAS in a Unix environment.&lt;/P&gt;&lt;P&gt;My EG does not show SASHELP.tmplmst or whater the template master is, or at least it does not show up in the library list.&lt;/P&gt;&lt;P&gt;I suppose that is because it is an item store and not a SAS dataset, so .... another aggrevation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;OK, enough steam whistle blowing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So how do I find what I need to know in the documentation?&lt;/P&gt;&lt;P&gt;Or are there only white papers and SUGI papers that cover the information?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't remember who, think is was tech support, that pointed me to a paper to customize the TOC.&lt;/P&gt;&lt;P&gt;What a pain that has been as well.&lt;/P&gt;&lt;P&gt;Can be done, but the hoops you have to jump through are rediculous.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SAS makes analyzing the data I have to chunk through easy.&lt;/P&gt;&lt;P&gt;SAS reporting makes up for that with ever increasing _________________&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Over the past 16 years, I have met people every now and then who claim to "know all things SAS", or some such thing.&lt;/P&gt;&lt;P&gt;Cindy, you are the closest I have ever found to actually fulfilling that remark.&lt;/P&gt;&lt;P&gt;Keep up your good work, and helpful patience.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 May 2012 17:17:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128279#M10658</guid>
      <dc:creator>Chasville</dc:creator>
      <dc:date>2012-05-29T17:17:55Z</dc:date>
    </item>
    <item>
      <title>Re: Struggling with Styles</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128280#M10659</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi:&lt;/P&gt;&lt;P&gt;&amp;nbsp; I'm not sure where to start. So let me start where I think the beginning is.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; LISTING or a "plain" text file was the first and ONLY output that SAS could produce for a long, long time. LISTING output was generally printed on a physical device (printer) that had a fixed pitch (or monospace) font and, so, achieving the "modern" look of proportional fonts was just not possible in LISTING output. So distinguishing one line on a report from the other by lines of dashes or equal signs was the only way to call attention to a break line. The LISTING output (what started as a "plain" text file) became known as "monospace" output when fancy printers with proportional fonts became available. When ODS was introduced, the LISTING output became known as the LISTING destination and/or traditional "monospace" output or the traditional "monospace" destination.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; At any rate, options that developed over the years, which were designed to work in an EBCDIC (the really old days) or ASCII text file on ALL platforms, are just not appropriate options for the varying result types such as HTML, RTF, PDF, CSV, LaTeX and other ways of presenting output when you use ODS (starting with SAS version 7).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; So, while I do understand your frustration, in the documentation, for example on the SKIP option of the BREAK statement DOES say (on the line for Restriction) that:&lt;/P&gt;&lt;P&gt;&lt;A class="active_link" href="http://support.sas.com/documentation/cdl/en/proc/63079/HTML/default/viewer.htm#p16uti3vzgml7gn1nt3ov7cqxf9i.htm"&gt;http://support.sas.com/documentation/cdl/en/proc/63079/HTML/default/viewer.htm#p16uti3vzgml7gn1nt3ov7cqxf9i.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;"SKIP &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN class="restriction"&gt;&amp;nbsp; Restriction: &lt;/SPAN&gt;This option has no effect on ODS destinations other than traditional SAS monospace output."&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; Any PROC REPORT option that ONLY works in LISTING will have the same type of restriction documented. And, as I pointed out, the "workarounds" have been known and published for a long time. When you use SKIP, for an ODS destination, should PROC REPORT insert an automatic COMPUTE block into your code? I don't think so. And here's my opinion why not: There are a LOT of "older" PROC REPORT options that only work in LISTING. The fix for skip is straightforward, but is about the only workaround that is simple and would work in any destination. All the other workarounds for LISTING only options are either more complicated or don't work in all destinations. I think of it in terms of my mom's advice: If you don't have enough candy for everybody, don't bring candy to the party. Meaning that if PROC REPORT fixes for LISTING options are like the candy, and if there isn't a straightforward fix for every option, it's better, in the long run, to show the fixes and let folks use them as needed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; About where you would see TEXTDECORATION:&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;TEXTDECORATION is a style attribute and appears in the documentation under the topic "Detailed Information for All Style Attributes" (9.3) or "Style Attributes and their Values" (9.2),&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/odsug/62755/HTML/default/viewer.htm#n19a4b40swc766n18qczor47r08f.htm"&gt;http://support.sas.com/documentation/cdl/en/odsug/62755/HTML/default/viewer.htm#n19a4b40swc766n18qczor47r08f.htm&lt;/A&gt; (9.3 doc)&lt;/P&gt;&lt;P&gt;TEXTDECORATION is not used, by default, in a style template, so you would only have found it in the documentation (as noted above), displaying the style template code would not have told you anything about TEXTDECORATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;In the topic, you will see the list of all the STYLE ATTRIBUTES that are available for usage for tables that you create with SAS. Usually, you use these STYLE ATTRIBUTES in one of two ways:&lt;/P&gt;&lt;P&gt;1) inside a STYLE= override for PRINT, REPORT or TABULATE (such as I show with PROC REPORT in the previous example or the one below)&lt;/P&gt;&lt;P&gt;or&lt;/P&gt;&lt;P&gt;2) inside a STYLE template (such as described in my paper on using STYLE templates: &lt;A href="http://support.sas.com/resources/papers/proceedings10/033-2010.pdf" title="http://support.sas.com/resources/papers/proceedings10/033-2010.pdf"&gt;http://support.sas.com/resources/papers/proceedings10/033-2010.pdf&lt;/A&gt; ) Inside a style template, a list of style attributes "belongs" to a style element (a style element is a piece of a report -- like SystemTitle or Header or Data cells or SystemFooter). This scheme -- where a style template is a collection of style element definitions and a style element definition is a collection of style attribute definitions-- is very elegant (in my opinion). It allows the SystemTitle to have one font and fontweight and fontsize that is different from the Header cell font, fontweight and fontsize and is also different from the Data cell font, fontweight and fontsize and is different from the By line font, fontweight and fontsize, etc, etc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; In my earlier post, I explained about the JOURNAL style when I said:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;"When I use the code below with TEXTDECORATION to do the OVERLINE,&lt;SPAN style="text-decoration: underline;"&gt; I had to also use the JOURNAL style&lt;/SPAN&gt; &lt;SPAN style="text-decoration: underline;"&gt;to remove the interior table lines&lt;/SPAN&gt;,&lt;SPAN style="text-decoration: underline;"&gt; so the OVERLINE would be visible."&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Anyway, I did not say or mean to imply that &lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;you&lt;/STRONG&gt;&lt;/SPAN&gt; had to use JOURNAL style as your base style. I said that &lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;I&lt;/STRONG&gt;&lt;/SPAN&gt; used it to show you the appearance of the TEXTDECORATION lines. If I had coded the example using the default PDF style, then the interior table lines that normally are used for PDF report tables would have looked weird with the OVERLINE (again, in my opinion). But, in all honesty, I wouldn't use TEXTDECORATION=OVERLINE to make the summary lines distinctive; my usual method to highlight the summary lines (from BREAK and RBREAK) is to make them the same style as the HEADER cells (shown below).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;PROC TEMPLATE can access many different types of templates. To see what is inside various item stores or template stores, you need to use more precise syntax to see the entire list of STYLE definitions that are available to you. In this paper: &lt;A href="http://support.sas.com/resources/papers/proceedings09/227-2009.pdf" title="http://support.sas.com/resources/papers/proceedings09/227-2009.pdf"&gt;http://support.sas.com/resources/papers/proceedings09/227-2009.pdf&lt;/A&gt; on page 2 look at the code for Example 2. To see the JOURNAL style existed, you would have had to use LIST STYLES; in your PROC TEMPLATE code. However, unless you are up for reading PROC TEMPLATE code, you can use the STYLE=JOURNAL option in your ODS invocation in order to see the actual output that is created. Doing a simple LIST with PROC TEMPLATE will not reveal the full code for a style template definition. You would have had to use a SOURCE statement in PROC TEMPLATE to see all the possible style attributes that were used in a template.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Alternately, since you are using EG, you could also review the overall "look and feel" of a SAS pre-defined style template by opening the EG Style Wizard, where you could browse a "local" copy (CSS version) of the most common styles. Normally JOURNAL style is one of the styles that folks use when they want mostly border and line-free black and white output that looks like the kind of tables published in journals.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Back to EG -- there are some ODS basics that EG protects you from needing to know about. For example, EG automatically inserts ODS statements around any SAS code that is generated by your project. And, yes, by default, when you look at a library in EG, only data sets are shown to you. This is part of EG's basic design and underlying assumptions that folks using EG largely did not want to worry about the "details" of submitting a job or seeing any of the SAS catalogs or item stores that were needed or any of the ancillary code that was needed to submit a job in batch. When you look at the SAS log for your project or task, you should see quite a bit "added" code -- that is what EG does automatically for you. But batch syntax for PROC TEMPLATE or PROC CATALOG should still work for you to reveal the SAS files that are not data sets in your libraries.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;In this paper, called The Greatest Hits: ODS Essentials Every User Should Know,&lt;BR /&gt; &lt;A href="http://support.sas.com/resources/papers/proceedings11/300-2011.pdf" title="http://support.sas.com/resources/papers/proceedings11/300-2011.pdf"&gt;http://support.sas.com/resources/papers/proceedings11/300-2011.pdf&lt;/A&gt; I cover some of the basics of ODS "essentials" and "hit #8" starting on page 21 is the one all about styles (ALL about styles).&lt;/P&gt;&lt;P&gt;If you want to watch a movie of the paper presentation, there is an SGF "Take-out" video on Brainshark, you can find the video here: &lt;A href="http://my.brainshark.com/ODS-Greatest-Hits-158359784" title="http://my.brainshark.com/ODS-Greatest-Hits-158359784"&gt;http://my.brainshark.com/ODS-Greatest-Hits-158359784&lt;/A&gt; and the first 6 minutes are ODS "intro" basics and then the "greatest hits" start at about slide 8 (since the audio is attached to each slide).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;ODS is not point and click. Using ODS and specifying ODS options or a custom style or changing a style or specifying a style override -- all of those changes are largely code-based changes, except for the few things you can select in the EG options.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;Perhaps the days of programmers writing programs using a particular syntax are over and now we have analysts pointing and clicking their way to analytic reports without ever seeing code. But for results that go "beyond" the defaults, I have always needed to know how to write or modify SAS programs. The way you apply a style to an HTML table is different from the way you apply style to an RTF table or a PDF table or a LaTeX table -- so there has to be one way in SAS to have an impact on such varying types of output -- style templates or style definitions is that way that happens. I'm glad I don't have to know the ins and outs of RTF or PDF or HTML in order to produce output with ODS -- I just have to learn how ODS works and then my output is created appropriately for whichever destination I want. (And some things work in one destination, but may not work the same way in another. This is not because SAS is being nasty or persnickety, but because of the fundamental nature of the different destinations. LISTING is not RTF. RTF is not HTML. HTML is not LISTING. PDF is not HTML. HTML is not PDF. PDF is not LISTING. etc, etc.)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From my standpoint, having coded in Fortran, COBOL, a little PL1, Basic and a few other languages, I think SAS is much more simplfied as a language (in my opinion). It's not object-oriented, like Java or C++ (although if you like object-oriented, SAS has that too). I guess it depends on where you started. From where I started, SAS seems simple and Java and C++ seem arcane and like magic to me. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;I don't know what customizations you need to do to the PDF TOC -- a LOT can be done with ODS PROCLABEL and with the CONTENTS= option without needing ODS DOCUMENT at all. But, if you need to either replay or rearrange items in the TOC, then ODS DOCUMENT is appropriate. I've put an example of using ODS PROCLABEL and CONTENTS= below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyway, one of my PROC REPORT steps has 2 nodes, the top-level node in the TOC and then just 1 subordinate node. Those lower level nodes were controlled with CONTENTS= options. The second PROC REPORT step just shows the top-level node being used. There are no lower level nodes for the second PROC REPORT. I don't know what you want to achieve. If your requirement only involves renaming or removing nodes, you might not need ODS DOCUMENT. If your requirement is to add nodes or rearrange the output objects, then you probably will need ODS DOCUMENT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;cynthia&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;options nodate nonumber center orientation=portrait;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;title; footnote;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;data shoes;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; set sashelp.shoes;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; where region in ('Asia', 'Pacific');&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; ** need "fake" brkvar to change TOC node to something;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; ** other than "Table 1" in PDF TOC;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; brkvar = 1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods document name=work.shoes(write);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf file='c:\temp\proclabel_contents_techniques.pdf';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ODS PROCLABEL='Product Summary by Region';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** this proc report shows how to name the proc report;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** node something other than "Table 1";&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc report data=shoes nowd contents='';&amp;nbsp; /* quote-quote no space in between */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; column&amp;nbsp; brkvar region product ('Totals' sales inventory returns);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define brkvar / group noprint;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define region / group;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define product / group ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define sales / 'Sales' sum format=comma12. ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define inventory / 'Inventory' sum format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define returns / 'Returns' sum format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break after region / summarize style=Header{font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break before brkvar/ contents="Totals" page;&amp;nbsp; /* using brkvar to put string into TOC */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after region / style={background=white foreground=white};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; line ' ';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; rbreak after /summarize style=Header{color=purple font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; region='Grand Total';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ODS PROCLABEL='Product Averages by Region';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** this PROC REPORT suppresses all the TOC nodes created;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** by PROC REPORT and only keeps the PROCLABEL string in the TOC;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc report data=shoes nowd contents='';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; column brkvar region product ('Averages' sales inventory returns);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define brkvar / group noprint;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define region / group;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define product / group ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define sales / 'Sales' mean format=comma12. ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define inventory / 'Inventory' mean format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; define returns / 'Returns' mean format=comma12. ; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break after region / summarize style=Header{font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; break before brkvar/ contents="" page; /* using quote-quote to suppress lower level node */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after region / style={background=white foreground=white};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; line ' ';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; rbreak after /summarize style=Header{color=purple font_size=14pt};&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; compute after;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; region='Grand Total';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; endcomp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods _all_ close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods document close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** now replay the document;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;** but if the above PDF is OK, may not need this step;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf file='c:\temp\replay_shoes.pdf';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;proc document name=work.shoes;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;&amp;nbsp; replay;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;quit;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods pdf close;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: courier new,courier;"&gt;ods listing;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 May 2012 21:31:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128280#M10659</guid>
      <dc:creator>Cynthia_sas</dc:creator>
      <dc:date>2012-05-29T21:31:12Z</dc:date>
    </item>
    <item>
      <title>Re: Struggling with Styles</title>
      <link>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128281#M10660</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Wow Cynthia,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I did not expect a full essay.&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;P&gt;It will take me a while to go through all that.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I had worked with someone from Tech Support a number of months ago with dealing with PDF TOC's.&lt;/P&gt;&lt;P&gt;He pointed me to a white paper he had authored on the subject, and it proved very helpful.&lt;/P&gt;&lt;P&gt;Yes, I needed to rearrange the TOC to have a specific tree structure.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Personally, I took my first programming class in 1977 -- PL/C.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have been programming since, also in a large number of languages, from machine code and up.&lt;/P&gt;&lt;P&gt;I am Certified in SAS and told your C?O a number of years back that "SAS is the greatest data processing system on the planet".&lt;/P&gt;&lt;P&gt;I still feel that way, in general.&lt;/P&gt;&lt;P&gt;But, there are frustrating parts to it, as there are to everything else, and I think there have been periods in SAS's history where some management type person did not do it justice in documentation and development control.&amp;nbsp; But, that's my opinion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope you had a good Memorial Day weekend.&lt;/P&gt;&lt;P&gt;You are a real asset to SAS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 May 2012 23:00:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/ODS-and-Base-Reporting/Struggling-with-Styles/m-p/128281#M10660</guid>
      <dc:creator>Chasville</dc:creator>
      <dc:date>2012-05-29T23:00:49Z</dc:date>
    </item>
  </channel>
</rss>

