SAS Bits & Pieces

Here’s a few SAS bits and pieces which may be useful.

PROC FORMAT Date/Time Directives

A previously undiscovered feature of SAS (they seem to have snuck it in around version 6 without putting it in the list of new features, which all dedicated computer geeks read when upgrading), is the ability to create your own date/time/datetime formats.

Witness the following:

proc format;
	picture td (default=80)
		other='It''s %A, the %d of %B, year of our lord %Y' (datatype=date);

data _null_;
	a=today();
	put "Tom's date:  " a td.-l;
run;

Produces:

Tom's date:  It's Wednesday, the 11 of October, year of our lord 2000

Note the single quotes when creating the format to avoid triggering the macro language. The ‘-l’ in the put statement left-aligns it.

Note also specifying a default length for the format. Stupidly, SAS defaults to the length of the string specified, not the resulting length after the directives have been expanded.

See PROC FORMAT → PICTURE statement, for the various directives available and more information.

ISO 8601 Date/Time Support

Another obscurely documented feature is support for ISO 8601 date formats—buried under Base SAS → SAS XML LIBNAME Engine User’s Guide → Appendixes → ISO 8601 SAS Formats and Informats.

For instance,

data _null_;
	datetime=datetime();
	put datetime=is8601dt.;

	time=time();
	put time=is8601lz.;
run;

Generates:

datetime=2005-11-25T15:46:30
time=15:46:30+13:00

Available from at least version 8.