Hello everyone, I'm new to programming in SAS, I'm trying to see how much the tables and data occupy within the SAS server. I have managed to figure out how much the tables take up thanks to built-in SAS functions like dictionary.tables, from which I extract a lot of information. However, for the "Archivos" folder I would like to do the same but I think there are no functions of this type, where they give you information about the size, the last modification date etc. In this attached image I indicate which folder within SAS I want to go through to see what the files inside occupy: Searching the internet I found a code that goes through all the "Files" folders according to the path you indicate, the only problem is that this macro does not return the size of these files or the last modification date, I would like to have an output the same as the one I currently have but adding those 2 more fields, size (either in kb or mb/gb) and date of last modification. Here is the code, you just have to change the path. data work.list ;
length type $ 10 name $ 512 relpath $ 1024 path $ 2048
queue $ 10240 root $ 512 ;
* -- initialise our queue with the root directory -- ;
root = "/opt/sas/data/xxx/xxx/SASGuide/pg/" ;
* -- initialise our queue with the current directory -- ;
queue = "." ;
k = 1 ;
q_entry = scan( strip(queue), k, "|" );
do while ( not missing( q_entry ) );
* -- assign reference to the current entry -- ;
if ( filename( 'ditem', catx( "/", root, q_entry ) ) ^= 0 ) then
continue ;
* -- reset return variables and any references -- ;
call missing( name, relpath, path, type, did );
* -- assign directory reference -- ;
did = dopen( 'ditem' );
if ( did = 0 ) then continue ; * -- could not open directory ... next ;
do i = 1 to dnum( did ) ;
* -- common reference details to both directory and files -- ;
* -- get name -- ;
name = dread( did, i );
* -- get relative path -- ;
relpath = strip(tranwrd( catx( "/", q_entry, name ), './', ''));
* -- get absolute path -- ;
path = catx( "/", root, relpath );
* -- determine directory or file -- ;
if ( filename( 'item', path ) ^= 0 ) then
continue; * <-- could not assign a filename so next item ;
ditem = dopen( 'item' );
if ( ditem > 0 ) then do;
* a directory ;
type = "DIR";
output ; * add directory to the output data set ;
rc = dclose( ditem );
rc = filename( 'item', '' );
* -- add it to the queue -- ;
call catx( "|", queue, relpath ) ;
continue ; * <-- next directory ;
end;
* -- if we are here .. it is a file -- ;
type = "FILE";
* ... derive any file properties here ... ;
* -- clear the file reference -- ;
rc = filename( 'item', '' ) ;
output ; * add file to the output data set ;
end;
* -- close directory reference -- ;
rc = dclose( did ) ;
* -- get next directory in the queue -- ;
k = k + 1 ;
q_entry = scan( strip(queue), k, "|" );
end;
run; Could someone give me a hand with this or send me documentation that can help me to do what I want? I imagine that by getting a data step that adds these fields to the work.list I would have, but I don't know how to do this. Thank you very much in advance.
... View more