BookmarkSubscribeRSS Feed
Quentin
Super User

Hi all,

Apologies if this qualifies as a rant, but I'd be interested in some opinions.  I feel like I have a love-hate relationship with the ODS OUTPUT statement, and curious how others feel.

On the one hand, I love the ability to get PROC output as data.  And I like it so much that I usually use it before looking to see if a PROC has a specific OUTPUT statement, our OUT option, or OUTEST, etc.

That said, when I see the structure of the output datasets, I'm often, well, disappointed.  For example:

ods output FitStatistics=Fit;
proc reg data=sashelp.class;
  model height=weight;
run;
ods output close;
proc print data=Fit;
run;

Outputs:

                                                                                 
 Model     Dependent    Label1            cValue1          nValue1     Label2     cValue2         nValue2 
MODEL1     Height      Root MSE           2.52736        2.527356    R-Square    0.7705        0.770507 
MODEL1     Height      Dependent Mean    62.33684       62.336842    Adj R-Sq    0.7570        0.757007 
MODEL1     Height      Coeff Var          4.05435        4.054353                                     0 

There are so many obvious things wrong with the structure of that dataset, I won't even start.

So my question: is it fair for me to be disappointed by the structure of so many ODS output datasets, or should I be thinking about this another way?  Could it be that this format is useful to the PROC developer (I don't see how), so I should expect that it wasn't designed for my needs?  I struggle to see how this format could be useful to just about anyone...  Of course for backwards compatibility, its unlikely to hope that these output objects will be re-designed (thought it certainly has happened in the past), but does it suggest that SAS should consider adding alternative output objects?  Or am I just asking too much of ODS OUTPUT, and should go back to the PROC-specific syntax for getting at such data?

Kind Regards,

--Quentin

BASUG is hosting free webinars Next up: Jane Eslinger presenting PROC REPORT and the ODS EXCEL destination on Mar 27 at noon ET. Register now at the Boston Area SAS Users Group event page: https://www.basug.org/events.
2 REPLIES 2
ballardw
Super User

I could say you haven't specified as to what you find objectionable.

I guess it has to do with different items (label1) values per row. I would suggest that there are many, many posts on this forum as well as other sources that involve transposing the data into other shapes. The advantage is once you know what you want to do you can reuse the program to do the same time and again.

And you should see the things I've had to do with output from other programs because the users couldn't be bothered to learn output options and had to copy/paste/delete thousands of lines in text files...

Quentin
Super User

Yes, my problems with above are

  • Two items per row
  • Last item which is null, except nValue2 is 0 rather than null.
  • Having both a numeric and character variable that store the same information.

It is not hard to get data out of this format, and it is not the worst format imaginable.  But, it's still surprising to me that at some point some SAS developer sat down to create this table, and thought this structure was a good idea, rather than say 4 columns: Model; Dependent; Label; Value.

If somebody posted a structure like that in a question here, I think the correct answer would be "fix your data structure to be more normalized," rather than "here is how to work with your data."

When I see structures like this, I'm wondering if it's because somebody didn't put much time into it, or if somebody really thought this was a good idea.  The ODS output from PROC COMPARE is even worse...  I guess I would hope for better data structures from SAS PROCS.  Particularly because all of these table structures are new as of V7 (or perhaps they were only newly exposed via ODS, and already existed?)

BASUG is hosting free webinars Next up: Jane Eslinger presenting PROC REPORT and the ODS EXCEL destination on Mar 27 at noon ET. Register now at the Boston Area SAS Users Group event page: https://www.basug.org/events.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 973 views
  • 0 likes
  • 2 in conversation