I found the code below to scan a directory and find all the files with a certain extension. I am a bit confused with some of the code in the beginning though, specifically the purpose of filrf and mydir. Specific areas I am confused are the macro variables below. I don't quite understand why filrf is set to mydir, is mydir a predefined SAS keyword? Proc Google did not turn up any information on it so I am not sure. Also, I am not so sure about the next two macro variables. With RC, the filename function has the first parameter as filrf but not the macro variable, just the word filrf. Then the macro variable did is assigned to dopen(&filrf) which is actually dopen(mydir), how does this know which directory to actually open? If I just run the small segment of code I have below (before the main code) it does not return anything. When I set a macro variable "dir" to a directory, it does return values. I am really confused as to how this is working, if anyone could provide some insight I would really appreciate it. Segment of code: %let filrf=mydir; %let rc=%sysfunc(filename(filrf,&dir)); %let did=%sysfunc(dopen(&filrf)); Source: http://support.sas.com/kb/25/074.html Full Code: %macro drive(dir,ext); %let filrf=mydir; /* Assigns the fileref of mydir to the directory and opens the directory */ %let rc=%sysfunc(filename(filrf,&dir)); %let did=%sysfunc(dopen(&filrf)); /* Returns the number of members in the directory */ %let memcnt=%sysfunc(dnum(&did)); /* Loops through entire directory */ %do i = 1 %to &memcnt; /* Returns the extension from each file */ %let name=%qscan(%qsysfunc(dread(&did,&i)),-1,.); /* Checks to see if file contains an extension */ %if %qupcase(%qsysfunc(dread(&did,&i))) ne %qupcase(&name) %then %do; /* Checks to see if the extension matches the parameter value */ /* If condition is true prints the full name to the log */ %if (%superq(ext) ne and %qupcase(&name) = %qupcase(&ext)) or (%superq(ext) = and %superq(name) ne) %then %do; %put %qsysfunc(dread(&did,&i)); %end; %end; %end; /* Closes the directory */ %let rc=%sysfunc(dclose(&did)); %mend drive; /* First parameter is the directory of where your files are stored. */ /* Second parameter is the extension you are looking for. */ /* Leave 2nd paramater blank if you want a list of all the files. */ %drive(c:\,sas)
... View more