Techie Tip: Stamping logs with date, time and user name
By Craig Kasper

We run some of our SAS programs used for ongoing processes in batch mode. (From Windows, this is simple: Right-click on the file from Windows Explorer and select Batch Submit with SAS 9.1 from the context menu.) Running programs in batch mode ensures that the log and program output is saved. When multiple people may be running a specific program in batch mode at multiple times, it is typically a good idea to include information about when the program was run and by whom.

The following lines of macro code can be executed anywhere outside a PROC or a data statement to stamp output with date, time and user name.

Date:
%put NOTE: The current date is %scan(%sysfunc(date(),downame.),1), %scan(%sysfunc(date(),monname.),1) %scan(%sysfunc(date(),day2.),1), %scan(%sysfunc(date(),year4.),1).;

Time:
%put NOTE: The current time is %sysfunc(time(),tod8.).;

User Name (Windows only):
%put NOTE: The current user is %sysget(username).;

By way of explanation, the %sysfunc function calls regular SAS functions within macro code. %put is a macro statement for outputting text, so we need to call SAS functions like date() using %sysfunc as an intermediary. (The same effect could be achieved using a DATA _null_ statement, but this is more compact.) Also, note that downame, monname, day2 and year4 are all date formats, and can be replaced with other date formats if you prefer; the same goes for the time format tod. (When a function called by %sysfunc returns a value, the %sysfunc function applies any SAS format you specify before returning the value).

Similarly, the %sysget function returns the value of a variable tracked by the operating system. Recent versions of Windows make the name of the current user available in the USERNAME environment variable.

Avoiding overwriting files by generating filenames on the fly

Because macro functions can be used within double quotes in ordinary SAS statements, there are a number of ways to use macro functions to build filenames on the fly. Here’s a useful one, building on the previous tip. The following FILENAME statement generates a file name which includes the date and time that the file was run, which can then be used with PROC PRINTTO to allow the log to be saved to this file.

filename saveto "C:\SAS Logs\Log of Prog1 run - Date %sysfunc(date(),yymmddn8.) - Time %sysfunc(hour(%sysfunc(time())),z2.)-%sysfunc(minute(%sysfunc(time())),z2.)-%sysfunc(second(%sysfunc(time())),z2.).txt";

When the values from all of the macro functions are substituted, the actual filename will be something like:

Log of Prog1 run - Date 20081205 - time 10-13-22.txt

Note that by including the date before the time, and formatting time as four digit year/two digit month/two digit day, the files will be chronologically sorted when sorted by filename.

Adding your own help files to the SAS help menu

If your organization has a library of macros implemented for its users (as we do), it can be very useful to have information about the macros readily accessible. I recommend doing this by creating an HTML file which contains the documentation, then registering it as a help file in your SAS config file. Creating the HTML file with the documentation is straightforward enough, as Word and most other recent word processors will allow you to save your document as HTML.

To register your help file, add a line like the following to your SAS config file, which is typically located in your SAS install directory:

-helpregister "Text appearing in Help Menu" "C:\sample\location\of\file\Sample help file name.htm" "Status Line Text on Mouseover" "" HTML

This line may be added anywhere before the “/* DO NOT EDIT BELOW THIS LINE - INSTALL Application edits below this line */” line. You may add multiple help files this way by adding a helpregister line multiple times.

SAS and all other SAS Institute Inc. product or service names are registered trademarks \or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. Other brand and product names are trademarks of their respective companies. Copyright © 2009, SAS Institute Inc. All rights reserved.