Unless you are an experienced Unix script writer or you have gone through all the Unix tips and tutorials in the first section of this page then I would guess that at this stage of your Unix knowledge, you can see how useful it would be if you could run SAS inside a script and get it to talk to other Unix utilities but there is also no way you could write a script yourself. That is why I wrote sasunixskeleton. It writes a script for you and all you have to bother about is your SAS code and a few very simple things. First of all, here it is. You will need to paste it into your script library that you should have set up by now. Don't even bother to try to understand what is in it. When you get onto the Unix tips proper and go through all the examples I have there and do the practical exercises then I assure you that you will be able to understand it. But don't waste time now.
#!/bin/sh
# Script : sasunixskeleton
# Version : 1.0
# Author : Roland Rashleigh-Berry
# Date : 30 July 2003
# Contact : rolandberry@hotmail.com
# Purpose : To create a skeleton script that runs SAS
# SubScripts : none
# Notes : This utility generates a script to run SAS. It handles the Unix
# side so you can concentrate on your SAS code. When the script is
# generated you only need amend it where the word EDIT appears. You
# should search for it. It will appear at the top where a usage
# message it put out of the user does not suppl enough parameters
# (if no parameters are allowed then you can delete this section).
# Usage : sasunixskeleton
# sasunixskeleton myscript
#================================================================================
# PARAMETERS:
#-pos- -------------------------------description--------------------------------
# 1 (optional) name of script
#================================================================================
# AMENDMENT HISTORY:
# init --date-- mod-id ----------------------description-------------------------
#
#================================================================================
# This is public domain software. No guarantee as to suitability or accuracy is
# given or implied. User uses this code entirely at their own risk.
#================================================================================
if [ $# -lt 1 ]
then
echo -n "Enter script name: "
read progname
else
progname=$1
fi
if [ -f $progname ]
then
echo "$progname already exists in this directory. Please check on it and delete" 1>&2
echo "it if you do not need it. This utility will not overwrite it and will exit." 1>&2
exit
fi
echo -n "Enter purpose of script: "
read purpose
outfile=\$HOME/${progname}.tmp
cat > $progname << FINISH
#!/bin/sh
# Script : $progname
# Version : 1.0
# Author : EDIT
# Date : EDIT
# Contact : EDIT
# Purpose : $purpose
# SubScripts : none
# Notes : EDIT
# Usage : $progname EDIT
#
#================================================================================
# PARAMETERS:
#-pos- -------------------------------description--------------------------------
# EDIT EDIT EDIT
#================================================================================
# AMENDMENT HISTORY:
# init --date-- mod-id ----------------------description-------------------------
#
#================================================================================
# Put out a usage message if not enough parameters supplied
if [ \$# -lt 2 ] ; then
echo "Usage: $progname ............EDIT EDIT" 1>&2
exit 1
fi
# check on the existence of a sas program in the home directory
if [ -f \$HOME/${progname}.sas ] ; then
echo "SAS program $progname already exists in your home directory. You need to check" 1>&2
echo "if you need it and delete it if not. This utility will not overwrite it and" 1>&2
echo "will now exit." 1>&2
exit 1
fi
# Write SAS code out to a temporary file
cat > \$HOME/${progname}.sas << END
options validvarname=any nofmterr;
libname here './' access=readonly;
filename _outfile "\$HOME/${progname}.tmp";
EDIT EDIT EDIT EDIT
Put your code here. Use \$1 to resolve the first entered parameter.
Use \$2 to resolve the second entered parameter.
\$'s get treated like the &'s in front of macro variables by scripts.
It will try to resolve a Unix variable if you use one in a format.
To get round it you have to use a slash in front of the dollar like
this "\\$" .
Your final output should be written to _outfile. Do not change its
name. You can either reroute print output to it using a proc printto
like this:
proc printto print=_outfile;
run;
or you could use a data _null_ step like the following to put the
contents of a dataset out to the file like this:
data _null_;
file _outfile notitle noprint;
set xxxxx;
put @1 xxxx;
run;
END
# Run the SAS code
sas -log "\$HOME" -sysin "\$HOME/${progname}.sas"
# Delete the temporary SAS code and optionally the log
rm -f \$HOME/${progname}.sas # \$HOME/${progname}.log
# If output file exists then cat it and delete it
if [ -f $outfile ]
then
cat $outfile
rm -f $outfile
fi
FINISH
chmod +x $progname
So that's the script. On the next page I will show you how to use it to
create a very simple utility to do summaries for you. Click on this
link.
Go back to the home page.
E-mail the macro and web site author.