Leaving SAS: the script

15 September 11. [link] PDF version

I typically have one question when somebody hands me a SAS data set: how can I get out of SAS as quickly as possible?

Here's my best answer to that question: a bash script that writes a SAS data set in plain text to stdout.

#Usage, assuming you saved this to {\tt leave_sas}: 
# ./leave_sas my_data_directory/sas_dataset.sas7bdat > outfile.csv


if [ ! -e $1 ] ; then
        echo "File $1 does not exist."
else
        # Use POSIX shell string handling to get the path and filename
        base=`basename $1 .sas7bdat`
        dir="${1%/*}"
        saslib="${base##*/}"

        sas -noterminal -stdio <<-XXXXXX
            libname indata "$dir";

            PROC EXPORT
            DATA=indata.$saslib
            OUTFILE="STDOUT"
            DBMS=CSV REPLACE;
            PUTNAMES=YES;
            run;
XXXXXX
fi

As noted, this writes to stdout, so you're going to get a lot of data on the screen unless you pipe to something else or write to a file. You know my fetish for the Apophenia library, so I'd do something like

./leave_sas a_data_file.sas7bdat | apop_text_to_db -d',' '-' data_tab usable.db

and then get to work via SQL. Or as per the example at the head of the script, you could just write output a text file, and use it as you would any other.

This was generated via consulation with several SAS experts (thanks, Dr CLE and Ms NGA of Washington, DC), but I couldn't arrive at much consensus that this is the Correct Way. Perhaps the ODS would be better, and perhaps the export procedure won't work for all data sets. If you have any additional recommendations or caveats, do leave them in the comments.


[Previous entry: "Scope in C is e-z"]
[Next entry: "Tip-a-day mode"]