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: Mike Sale presenting Data Warehousing with SAS April 10 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: Mike Sale presenting Data Warehousing with SAS April 10 at noon ET. Register now at the Boston Area SAS Users Group event page: https://www.basug.org/events.

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

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
  • 985 views
  • 0 likes
  • 2 in conversation