My blog and forums are open for business in their new premises!

On 28 March 2017 I completed the migration of my blog and forums to a new server. You will not have to do anything different to access the new server, as it is all managed transparently by my router.

The new environment is protected by an uninterruptible power supply, and has an increase in its available disk space. I’m hoping that the chance of future interruptions has been dramatically reduced.

Alongside the blog are 2 forums where you can ask questions:

(1) The SAS Skills Discussion Forum is included when you register for the Free membership, and is where you can ask questions about SAS skills, but not SAS coding problems.

(2) The SAS Programming Forum, which has a very small subscription cost, is where you can ask SAS coding questions, including those from homework and interviews. This forum also includes a growing SAS course in the form of small topics. There are currently 3 main sections to the SAS course: Data Steps, PROC SQL and macros, but more are being developed.

What happened in Orlando?

As usual I ran a prize draw this year at SAS Global Forum in Orlando for a copy of my latest book, which was won by Matthew Hoolsema from Carnegie Mellon University from 49 draw entries.

Matthew Hoolsema won a copy of my book in Orlando

The sad part was that my well-thumbed sample copy, which allowed everyone to see what was in the book, was taken during the conference, so I will have to replace it with another brand new copy before my next free draw, instead of using that new copy as a prize. I must admit that I find it extremely annoying when a company can pay $100s to $1,000s for the conference registration, travel and accommodation, but nothing for a $40 book!

The conference’s Kick-Back party was held at Disney Hollywood Studios at the end of the 2nd full day of the conference after the public had left. I’d last visited this park in 1999, when it was called MGM Studios. Some of the “exciting” rides, which I have never enjoyed, were open, and my favourite show from 1999, “Indiana Jones Stunt Spectacular”, was still there, but disappointingly closed for the evening! Fortunately, unlike previous Kick-Back parties, the noise levels were low enough to permit normal conversations, so my voice was still OK the following morning for my presentation. You may remember that in March I said that I was presenting “Making Validation of Graphs Easier: The Benefits of ODS Graphics” at the conference on 5 April 2017. The video recording of my presentation can now be viewed on the SAS web site, along with several of the other presentations, and my paper, slides and sample code can be downloaded from this blog site.

Next year SAS Global Forum will be in Denver, Colorado. I’ve never been there before, so I’m looking for some suitable topics for new presentations. Any suggestions?

Why don’t SAS development teams talk to each other?

We all know that SAS develops its software in separate teams, but it can be really annoying when it becomes apparent that several associated teams haven’t planned together how a SAS procedure will work.

I’m going to take as an example PROC IMPORT, which is part of Base SAS, but is also included in SAS/ACCESS. When you run the following program all the variables created begin with VAR, i.e. VAR1, VAR2, VAR3, VAR4, VAR5, etc., and this would also be true for DBMS=TAB and DLM:

PROC IMPORT FILE = "test.csv" DBMS = CSV REPLACE;
  GETNAMES = NO;
RUN;

However, using similar PROC IMPORT code for DBMS=EXCEL, in SAS/ACCESS for PC Files, will create variables beginning with F, i.e. F1, F2, F3, F4, F5, etc.:

PROC IMPORT FILE = "test.xls" DBMS = EXCEL REPLACE;
  GETNAMES = NO;
RUN;

More shocking though is using PROC IMPORT code for DBMS=XLS or XLSX in UNIX or Windows, in SAS/ACCESS for PC Files, as this will create variables with no prefix at all, i.e. A, B, C, D, E, etc.:

PROC IMPORT FILE = "test.xls" DBMS = XLS REPLACE;
  GETNAMES = NO;
RUN;

This inconsistency even extends to using GETNAMES = YES too when there are multiple columns with the same label.

If you want to import a CSV file, instead of an Excel file, or indeed import an Excel file in UNIX, then the subsequent processing step will have to be updated to use the new variable names (annoying!). Why can’t the procedure be consistent, or, at least, have a parameter, like PREFIX=, that allows users to choose the prefix?

Back in SAS 6 there were monumental problems caused by each SAS procedure having to manage their own output destinations, and each one doing it in a slightly different way, so ODS (Output Delivery System) was introduced in SAS 7 to make the output interface separate from the procedures. SAS now need to develop standards for parameters and defaults, just like they did for output!

To vote for this to be included in the next SASware Ballot just click here and vote up the idea!

Warning: you may need to use a desktop browser to vote up the idea! 🙁

Do you have any examples of similar inconsistencies in SAS?

My published Training Course list is for companies, the SAS course is for individuals

I published a list of available training courses for 2017 in January this year, but this course list is actually intended for companies, and not for individuals, as the courses have a fixed price no matter how many people attend them. All the training materials are personalised and supplied in digital form, and so can be duplicated for that client to re-use internally.

Individuals looking for SAS training should subscribe to the SAS course in the SAS Programming Forum instead, which is specifically targeted at individual SAS learners and programmers, and is priced as a low-cost monthly subscription. However, the SAS Programming Forum is not just there for the SAS course, but can be used to get answers to any SAS-related questions you may have too, even if they are from homework or interview questions.

See “Making Graphs Easier to Validate – The Benefits of ODS Graphics” at SAS Global Forum in Orlando

Are you attending SAS Global Forum in April this year? If you are then you have the opportunity to see me present “Making Graphs Easier to Validate – The Benefits of ODS Graphics” on Wednesday 5 April from 1100-1150hr. I’ll be in the Americas Seminar Room on Dolphin Level 5 at the Walt Disney World Swan and Dolphin Resort in Orlando, Florida. In this presentation I’ll be talking about how to make your graphs easier to validate by using ODS Graphics and a lot of common sense!

However, maybe you are not going to be in Orlando in April, but you and your colleagues would still like to see me present on this topic. What can you do about that? Well it should still be possible, because I’m currently developing a 1/2 day training session which I’m calling “Defensive SAS Programming”. This will include “Making Graphs Easier to Validate – The Benefits of ODS Graphics”, but also “Writing Reusable Macros” and another new topic “The Art of Defensive Programming: How to Cope with Unseen Data”.

You’ll see from the link above that I don’t have to be in the room with you to present, therefore I could present through your company’s video-conferencing system from my own office at home to your conference room wherever you are instead. The “Available” and “Coming Soon” training sessions can all be booked in advance, but the “Coming Soon” training sessions will be developed specifically for you, if you are the first to request them.

Going back to “Making Graphs Easier to Validate – The Benefits of ODS Graphics”, this presentation and paper will be available for download from the Product Shop shortly after it is presented for the first time, but may also be available from the SAS Global Forum site before the conference too!

I’m looking forward to SAS Global Forum, and hope to see you there, or elsewhere in the near future!

There is now a new Training Course list for 2017

There is now a new Training Course list for 2017, which can be downloaded from here. The courses available in 2016 are still there, but I’m developing some new SAS-related courses, based on the SAS course, which you can accelerate to production status by requesting them:

  • ½ day SAS Data Step training
  • ½ day SAS PROC SQL training
  • ½ day SAS macros training
  • ½ day Defensive SAS Programming training

Your interest in any of these courses will result in them being developed as priority tasks!

Fast – Cheap – Good – Pick any 2!

Fast - Cheap - GoodI’m sure you’ve seen this sign many times before, but it is a very important statement!

At Holland Numerics we strive to provide good service at all times, so we will never even consider providing fast service cheap, because it will not be good! That said, we can provide good service fast, but it won’t be cheap, and good service cheap, but it won’t be fast.

Sometimes we have to sit back and consider Oscar Wilde’s view (from his play “Lady Windemere’s Fan”) that at his point in time a cynic, but now everyone, knows the price of everything, and the value of nothing! This is particularly relevant for consultancies like Holland Numerics trying to determine appropriate pricing for consulting services.

That is why the SAS Programming Forum is accessed for a small subscription, not because we need it to be an income stream, but because we want to make certain that subscribers really want to access the valuable SAS-related information I have added over several months in that forum. I like to think this is perfectly exemplified by another quote, this time from my all-time favourite novel “Time Enough for Love” by Robert A Heinlein:

“Anything free is worth what you pay for it.”

What is the SAS Programming Forum and why does it cost to access?

It is rather sad that everyone knows the price of everything and the value of nothing! I have paraphrased this statement somewhat from the original written by Oscar Wilde for Lord Darlington in “Lady Windemere’s Fan”, but the reality is very much in evidence everywhere today. But how is that relevant to the SAS Programming Forum?

I wanted to create a place where students of SAS programming (which includes myself, as I try to learn something new about SAS every day) could ask SAS-related questions, even if they were from interviews or homework, without being criticised. However, I wanted to exclude those asking questions because they were too lazy to research the answers themselves (#LAZYWEB), so I hoped that charging a small amount to access the forum would filter out those trying to get free information with no effort, but encourage those enthusiastic enough to pay to learn about SAS an opportunity to do so. The SAS Programming Forum subscription is only GBP 5.00 per month for up to 3 months via PayPal, so it can be stopped at any time, but also renewed easily, and includes access to my SAS course about SAS programming topics, which I’m progressively building, and currently includes 4 sections on SAS components, Data Steps, PROC SQL and SAS macros, and now totals 25 topics in all. The sections are intended to be read sequentially, but are, for the most part, independent of each other. The key feature of the SAS Programming Forum and the SAS course is that questions can be asked at any time and they will be answered, provided sufficient information is given in the question. This is not a “get out” clause, but a learning point for all prospective SAS programmers that without sufficient information you cannot write a SAS program that meets the customer’s needs, so you have to be able to ask question yourself!

I’m presenting “Writing Reusable Macros” at the PhUSE Conference in Barcelona from 10-12Oct2016

I’m presenting “Writing Reusable Macros” in the Coders’ Corner stream at the PhUSE Conference in Barcelona from 10-12Oct2016. You can download my paper and presentation from here.

Hope to see you in Barcelona.

The SAS Programming Forum is growing: a new SAS course topic posted and another SAS question answered

The SAS course and the SAS Programming Forum continue to grow, I have just added a new course topic about the PROC SQL data set combining, and there are now 21 topics in 3 different sections:

  • [A] SAS components – 2 topics
  • [B] Data Steps – 13 topics
  • [F] PROC SQL – 6 topics (1 new topic!)

The SAS course topics themselves are in the SAS Programming Forum, which can only be accessed by Programmer level members, but Free members can read the SAS course – Home page and see the individual topic names.

I’ve also added an answer to a new SAS-related question in the SAS Programming Forum about re-ordering data sets without using PROC SORT. Again this topic can only be accessed by Programmer level members.

More topics and sections are being developed, so register for free now to be kept up-to-date about all of the news, so you can take advantage of the Programmer level when it suits you best!