GSK PowerPoint template

advertisement
RTSUG 04Feb2014:
Beyond Directory
Listings in SAS
By: Jim Worley
Directory Listings in SAS – What is missing?
– There are multiple ways in SAS to get a list of directory contents, including using SAS file
functions (e.g. FILENAME, DOPEN, DNUM, etc.)
– No additional information available, limits what can be done with automation
– Very specific information given, no ability to customize what data is received (e.g. last
modified date vs. creation date)
RTSUG 04Feb2014: Beyond Directory Listings in SAS
2
Using a Pipe in SAS
– A “pipe” allows you to take the output messages from a system command and redirect it to
another location other than the command window
– In SAS, using PIPE on a FILENAME statement allows you to redirect messages from a
command into a SAS dataset through the infile statement
– Syntax:
Filename DIRLIST pipe 'dir "C:\Users\jlw34091\examples" ';
Standard FILENAME statement
Add the word PIPE after the
filename handle
Use a system command
surrounded by single quotes
– Since the system command requires being surrounded by single quotes, adding macro
variables to automate command is possible but not straight forward. It is beyond the scope of
this presentation but more information can be found online
RTSUG 04Feb2014: Beyond Directory Listings in SAS
3
The “DIR” command
– Windows based command to get information about files in a directory
– Has multiple flags to change what information is presented, run either “dir /?” on a
command line or search Google
– Some flags include “/a-d” to exclude subdirectory names, “/b” to exclude details except
filename, and “/s” to search subdirectories
– By default lists the modified date, file size, and file name
RTSUG 04Feb2014: Beyond Directory Listings in SAS
4
Raw Input Dump
filename DIRLIST pipe 'dir "C:\Users\jlw34091\examples" ';
data dirlist ;
length buffer $256 ;
infile dirlist length=reclen dlm="~" missover;
input buffer $;
run ;
RTSUG 04Feb2014: Beyond Directory Listings in SAS
5
Only Keep Rows We Want
– Adding an IF statement allows us to only keep rows meeting the criteria we want. This
example will only keep SAS files.
– The IF statement below does three things. First it only keeps rows that begin with a valid
date. Next it deletes any rows that are a directory. Finally it only keep rows that end with
“.SAS”. While the last criteria would be enough to filter out the rows we want, all three are
included to show examples of different ways to filter the data.
data dirlist ;
length buffer $256 ;
infile dirlist length=reclen dlm="~" missover;
input buffer $;
if input(scan(buffer,1," "),??MMDDYY10.) and index(buffer,"<DIR>") = 0
and index(upcase(buffer),".SAS") > 0;
run ;
RTSUG 04Feb2014: Beyond Directory Listings in SAS
6
Creating Useful Variables
data dirlist ;
...
buffer = compbl(buffer);
*Remove extra spaces;
LastModDate = input(scan(buffer,1," "),MMDDYY10.);
LastModTime = input(substr(buffer,12,8),Time.);
FileSizeInBytes = input(scan(buffer,4," "),comma20.);
FileName = substr(buffer,index(buffer,scan(buffer,5," ")));
format LastModDate date9. LastModTime Time5.;
run ;
RTSUG 04Feb2014: Beyond Directory Listings in SAS
7
Beyond the Basics
– Almost any system command for Windows and UNIX/Linux can utilize the PIPE feature of
the SAS filename statement
– Similar to running an X command but with more feedback than just the exit status
– Can be used to help automate processes based on system information without the need of
any manual intervention
– Some example Windows commands that can be used are: FC (for comparing two files),
FIND (Search within a file), OPENFILES (to check for file locks), and WHERE (search for
a file)
RTSUG 04Feb2014: Beyond Directory Listings in SAS
8
Questions?
(Time Permitting)
Contact :
Jim Worley
Principal Programmer/Analyst
Email
james.l.worley@gsk.com
RTSUG 04Feb2014: Beyond Directory Listings in SAS
9
Download