10-12-2016 05:47 AM
I am trying to Unzip some files in a location connected to UNIX.
However there are several to Unzip and I thought it will be easier to code using a macro.
But I am not sure how to alter the "x" command or use the following statement in the macro
x "gunzip /sas/data/...."
Would anyone have any ideas of how to implement this code in the macro.
10-12-2016 06:01 AM
EG typically doesn't allow for X commands unless you've overridden the default settings.
Whats the parameter for your macro? The filenames? Or will you automatically scan a folder for zip files and unzip them all?
Before writing a macro first get base code working. Then determine your parameters, and then convert.
10-12-2016 06:15 AM
First of all, gunzip accepts a list of files on the commandline. Therefore you can use wildcard characters to name a group or groups of files.
Second, you need to have the XCMD system option enabled at startup; there is an option for that in the metadata of workspace servers. You cannot change this option during SAS runtime.
Third, you can run your gunzip command repeatedly from a dataset containing filenames with call system(). No need for a macro, unless you want to automate that (parameterized filename patterns, directories).
10-12-2016 11:30 AM
If you have IML Studio then you should have a bridge to R you can then do the following library(R.utils); wd<-getwd(); setwd("c:\\temp"); gunzip("class.sas7bdat.gz",remove=FALSE,overwrite=TRUE); setwd(wd); Note gunzip removes the gz file and creates c:/temp/class.sas7bdat
10-12-2016 11:48 AM
You can call the X command in a macro the same way you would call it outside of a macro.
%macro gunzip(filename); x "gunzip &filename" ; %mend gunzip;
But I find it is usually better to use a pipe to run commands since you can then capture any responses the command might make.
%macro gunzip(filename); data _null_; infile "gunzip &filename" pipe; input; put _infile_; run; %mend gunzip;
10-12-2016 09:17 PM
Have you considered using the Filename ZIP engine? Here how this could work: