Second Birthday

It’s’s 2nd birthday this week!

The past 2 years have gone very quickly I must say. I set out with a goal of writing a least 1 post every month. Not very ambitious I know, but realistic for me nonetheless! I’ve never been much of a writer. I’ve always been impressed by people who appear to write so well, and even more so by those that have the stamina and skill to author and publish a book. Maths, Science & Computers have always been my thing ever since way back in school and I have generally avoided writing unless I had to. I do remember reading a blog post by Joel Spolsky a while back where he said that “Writing is a muscle. The more you write, the more you’ll be able to write.” It sounded pretty reasonable to me. As a training course instructor I’ve always found that one of the great benefits of teaching was that I necessarily had to learn much more of the details for whatever I was teaching. I’ve found that the same appears to be true about writing publicly accessible blog posts. The fear of being asked tough questions or being challenged on topics turns into the pleasure of learning more!

Well, I’m pleased to say that Continue reading “Second Birthday”

Some Milestones …

My blog has seen a few milestones of late:

  1. It had 1st birthday recently (boy that year went quickly!)
  2. … then, thanks to mentions from Waynette Tubs in the June edition of the SAS® Technical Report, and Andrew Ratcliffe in his excellent NOTE: blog, it saw a fair bit of extra traffic this month. The unique monthly visitor count for topped 1000 visitors for the first time! I got especially geeky excited when I saw it hit 1024.
  3. … and finally, in a lesser milestone, the number of total spam comments deleted over the past year topped 1000 too – would have been happy not to have seen that milestone, but I guess it’s probably peanuts compared to what other blogs get :)

Thanks to all the readers out there, and special thanks to those that comment, tweet, retweet and say nice things about on other sites/blogs too.

Happy SAS platform admin-ing to all.

Paul also available via

This blog is now available via the new aggregator, along with many other great SAS related blogs. It’s well worth checking out. If you’re wondering how it’s different from planet there’s a Q&A item about it at the bottom of the about page. now has a Blog Roll (and roll of rolls)

Thanks to Andy Ratcliffe for adding to his blog roll on NOTE:.

This was a timely reminder for me to add a blog roll to this blog, something I had been meaning to do for some time now, and so I was prompted to make a start on it. You can find the initial blog roll in the column on the right hand side of this page.

My intention with this blog roll is not to list every SAS related blog I read because there are already a few other better, more definitive blog rolls available. I will just add a few of my favourite ones, especially those where I have seen some platform admin related content in the past. The ones I am starting off by adding are:

  • NOTE: The blog of Andy Ratcliffe’s blog has a number of articles on architecture, admin, backup, DI, BI, OLAP etc.
  • real business intelligence for real users: Angela Hall’s blog is a veritable encyclopaedia of SAS BI related information useful for SAS platform administrators – not to be missed!
  • The SAS Dummy: Chris Hemedinger’s blog has many articles of interest to admins managing SAS Enterprise Guide and SAS Add-In for Microsoft Office installations.

If you are after a more complete list of SAS related blogs and RSS feeds I would also recommend the following:

… you might think of this as a blog roll of blog rolls! :)

BTW if you are daunted by the amount of SAS related information out there I would highly recommend Google Reader. I switched a few months ago and since then have been able to skim read a lot more resources, in a lot less time, from any device at hand (iPad, Android phone, MacBook, Linux notebook etc.) and being a web app all the devices are always in sync with each other. I’d be lost without it now.

Updating the ExcelXP Tagset via the URL Access Method

Every now and then I need to update the version of the ExcelXP tagset for a SAS® 9.1.3 platform installation.

SAS programmers use the SAS Output Delivery System (ODS) and ExcelXP tagset to generate good looking multi-sheet Microsoft Excel files (in XML format). This tagset has gone through a number of versions so the version you have installed could be an old one. The installation I saw today had v1.28 whereas the latest available version is v1.86 (as of today).

The options available for updating the version of the ExcelXP tagset are documented in SAS Usage Note 32394: Installing and Storing Updated Tagsets for ODS MARKUP at

I usually modify the main SASHELP.TMPLMST so the updated version is available for the entire SAS platform installation. This involves manually downloading the latest ExcelXP tagset PROC TEMPLATE code from and then running the downloaded code using a small %include wrapper as shown in the usage note.

Today it occurred to me that I could combine the steps, modifying the %include wrapper to automatically download and execute the latest tagset code from the SAS web site using the URL access method.

Here is the code I used to automate the tagset update process:
filename xlxpurl url "";
ods path sashelp.tmplmst(update);
%include xlxpurl;
ods path reset;
filename xlxpurl clear;

Further information about the URL access method (for SAS 9.1.3) can be found in the SAS OnlineDoc page for the FILENAME Statement, URL Access Method at

Whilst this code removes the manual step of downloading the code and providing the download location in the %include wrapper, there are a few things you might want to consider before using it:

  1. Automatically downloading and running code from an internet site using the URL access method with %INCLUDE is potentially very dangerous. Whilst the URL in the code above currently points to a valid SAS web site location for the latest ExcelXP tagset code this may not always be the case. Consider what you might be %include-ing if the ExcelXP tagset code is ever moved (a 404 error page?) or the code at that location changes (such as in an unlikely worst case scenario where your providers DNS is compromised and is directed elsewhere!). Of course these concerns also exist with manually downloaded code but with manually downloaded code you do have the opportunity to review the code before it is executed – assuming you take that opportunity :)
  2. The server or workstation you run the code on needs to have internet access. If you need to use a proxy server you will need to specify additional options on the initial filename statement.
  3. Are you sure the version you are downloading and installing is the version that is required (and has been tested with any existing ODS code)?

After having read the caveats above you might decide that although this might have been an interesting exercise, it may not be appropriate for you to use. I fully understand any such reservations. Although I will probably use this code again myself, I will only do so after first checking the URL provides valid ExcelXP tagset code from the machine it is going to run on.

Finally, if you want to find out which version of the tagset you have installed you can use the following code:
filename xlxptmp temp;
ods tagsets.excelxp file=xlxptmp;
ods tagsets.excelxp close;
filename xlxptmp clear;

After I had run the automated update the version check code generated the following log fragment:
NOTE: This is the Excel XP tagset (SAS 9.1.3, v1.86, 04/15/08). Add options(doc='help') to the ods
statement for more information.