Get free disk space in SAS on Windows

This SAS macro retrieves the amount of free disk space, and puts the value in the SAS log and in a global macro variable. It works with local and remote drives and mapped and UNC paths. To avoid data loss, use it as a sanity check to verify there is a reasonable amount of disk space before writing data.

%macro windows_bytes_free(sm_path);
%global mv_bytes_free;
/* In case of error */
%let mv_bytes_free = -1;
/* Run the DIR command and retrieve results using an unnamed pipe */
filename tempdir pipe "dir /-c  ""&sm_path""  | find ""bytes free"" " ;
data _null_;
    infile tempdir length=reclen ;
    input line $varying1024. reclen ;
    /* Parse the output of DIR using a Perl regular expression */
    re = prxparse('/([0-9]+) bytes/');
    if prxmatch(re, line) then do;
        bytes_str = prxposn(re, 1, line);
        bytes = input(bytes_str, 20.);
        /* Assign available disk space in bytes to a global macro variable */
        call symput('mv_bytes_free', bytes);
        kb = bytes /1024;
        mb = kb / 1024;
        gb = mb / 1024;
        format bytes comma20.0;
        format kb mb gb comma20.1;
        /* Write a note to the SAS log */
        put "NOTE: &sm_path " bytes= kb= mb= gb=;
%if &mv_bytes_free eq -1 %then %put ERROR: error in windows_bytes_free macro;
/* example of use */
* C: drive;
%put mv_bytes_free &mv_bytes_free;
* UNC path;
%put mv_bytes_free &mv_bytes_free;
* WORK library, because sometimes WORK is not on C:;
%put mv_bytes_free &mv_bytes_free;

Tested with SAS 9.3 on Windows 7 64-bit (US English).

Updated 8/9/2013 to handle spaces in the path name. Added example showing how to find location of WORK library. */

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s