next up previous
Next: Killing all sas processes: Up: Utilities Previous: Parsing the SAS log:

Looking at SAS datasets: sasprint

An apparent advantage of Windows for SAS is that SAS datasets (*.sas7bdat files) cannot be opened and read on Unix. This bash utility I call sasprint allows you to print the first N observations of a SAS dataset.

I save this bash script as a file named sasprint in a directory in my path, and I call it by saying

sasprint /wrds/crsp/sasdata/sm/msf.sas7bdat #prints 20 observations (default)

sasprint /wrds/crsp/sasdata/sm/msf.sas7bdat 30  #prints 30 observations

sasprint /wrds/crsp/sasdata/sm/msf.sas7bdat 20 'abs(prc)>5' #prints 20 observations where PRC>5

sasprint /wrds/crsp/sasdata/sm/msf.sas7bdat 20 'abs(prc)>5' 'permno date ret' #prints permno date ret

The code follows:

#!/bin/bash

if [ ! -f $1 ]; then
    echo "File $1 does not exist"
    exit
fi


fullfilename="$1"

filepath="${fullfilename%/*}"
filename=$(basename $fullfilename)  #only the filename
filename=${filename%.*} #without the extension

numberoflines=$2
if [ -z $2 ]; then
    numberoflines=20
fi

wherestatement=""
if [ ! -z "$3" ]; then
    wherestatement="where $3;"
fi

varstatement=""
if [ ! -z "$4" ]; then
    varstatement="var $4;"
fi

command="libname xtemp '$filepath/'; proc print data=xtemp.$filename (obs=$numberoflines); $wherestatement $varstatement"
blank="                                                              " #Hack: sas seems to chop off the first few characters

echo "$blank $command" | sas -sysin /dev/stdin -print /dev/stdout -log /dev/null

#Check if SAS returned an error
if [ $? -ne 0 ]; then  
    echo "Error in program: rerunning for log"
    echo "$blank $command" | sas -sysin /dev/stdin -log /dev/stdout -print /dev/null
fi

Notice the use of the sysin option, which tells SAS where to find code (in this case, in standard input: STDIN). Notice also the redirection of the log and lst files (see section 15.4).



Andre de Souza 2012-11-19