printallc

[last updated - 31 July 2003]

This utility prints all the information it can find in a library that satisfies a condition on a character variable. You would typically use this to print out all information for a subject if "subject" were a characterc variable like this printall subject="1234". Output goes to the terminal window by default as always. It is up to the user to redirect if required.


#!/bin/sh
# Script     : printallc
# Version    : 1.0
# Author     : Roland Rashleigh-Berry
# Date       : 31 July 2003
# Contact    : roland@rashleigh-berry.fsnet.co.uk
# Purpose    : To print out all records in a library that satisfy a condition on
#              a character variable
# SubScripts : none
# Notes      : Make the data directory the current directory. Output goes to
#              terminal window by default.
# Usage      : printallc subject='1234'
# 
#================================================================================
# PARAMETERS:
#-pos- -------------------------------description--------------------------------
#  1   condition on numeric variable
#================================================================================
# AMENDMENT HISTORY:
# init --date-- mod-id ----------------------description-------------------------
# 
#================================================================================

# Put out a usage message if not enough parameters supplied
if [ $# -lt 1 ] ; then
  echo "Usage: printallc subject='1234' " 1>&2
  exit 1
fi

# check on the existence of a sas program in the home directory
if [ -f $HOME/printallc.sas ] ; then
  echo "SAS program printallc 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/printallc.sas << END
options validvarname=any nofmterr formdlim='-';
libname here './' access=readonly;
filename _outfile "$HOME/printallc.tmp";
%let variable=%scan($1,1,^=<>);
%put >>>>>> variable=&variable;
%let value=%scan($1,2,^=<>:);
%put >>>>>> value=&value;
%let op=%substr($1,%sysfunc(indexc(%quote($1),^=<>)),%eval(%length($1)-%length(&variable)-%length(&value)));
%put >>>>>> op=&op;
%let value="&value";
proc printto print=_outfile;
run;
data _null_;
  set sashelp.vcolumn(where=(libname="HERE" and name="&variable"));
  call execute('proc print data='||trim(libname)||'.'||trim(memname)||'(where=(&variable.&op.&value));
  title "$1 - ALL DATA FOR '||trim(libname)||'.'||trim(memname)||'";run;');
run;
END


# Run the SAS code
sas -log "$HOME" -sysin "$HOME/printallc.sas"


# Delete the temporary SAS code and optionally the log
rm -f $HOME/printallc.sas # $HOME/printallc.log 


# If output file exists then cat it and delete it
if [ -f $HOME/printallc.tmp ]
then
  cat $HOME/printallc.tmp
  rm -f $HOME/printallc.tmp
fi


Go back to the home page.

E-mail the macro and web site author.