08-26-2016 03:55 PM
I have been looking around the communities and Google today trying to find a way to do this but I havent been able to. I am new-ish to SAS programming so please bear with me.
I would like to write a program that automatically checks which tables are loaded in LASR and do a proc contents ONLY to the tables that are currently loaded.
I have looked at Proc imstat, Proc SQL, Proc LASR to see if there is a way to check Load/Unload status on a LASR table but I am coming up empty.
Is there a SAS Variable(either in dictionary or otherwise) that provides this information, and if so, which Proc would work best?
08-27-2016 11:28 AM
Im not familiar with SAS Analytics, but I have the feeling that you might find answer or guide in the next link:
Look also to the contents on left side of the page.
Using SAS BASE / SQL you can get all availabale tables and columns by:
create table u_name_it as select *
I don't know how to recognize LASR tables and distinguish them from others.
If you know add a WHERE statment to the SQL, to subset them only.
08-29-2016 02:01 PM
Dictionary.tables doesnt seem to have an attribute for Loaded/Unloaded status.
I also tried Dictionary.columns it either makes my SAS Session unresponsive, or errors out when it tries to read an unloaded table.
08-29-2016 12:31 AM
A great question and one I'd like to know the answer for too. I did a bit of searching and I think the answer is here in the special memory usage tables available for SAS VA:
08-29-2016 09:03 AM - edited 08-29-2016 09:24 AM
I wrote a macro to do something similar. I wanted to check a table's load status and, if it is unloaded, fire a stored procedure that loads it. It's for reloading critical tables after a reboot, but you could adapt it for your needs. It uses the _T_TABLEMEMORY set in the LASR library.
Instead of checking a specific table you will want to filter down the loadedtables dataset and then iterate through the rows to fire your PROC CONTENTS.
data loadedtables; set VALIBLA._T_TABLEMEMORY; run; %macro ifunloaded(tablename, thescript); proc sql noprint; select count(*) into :OBSCOUNT from loadedtables where tablename = upper(&tablename) and uncompressedsize > 0; %if &OBscount = 0 %then %do; %put "&tablename is unloaded, we need to reload it"; proc stp program=&thescript; run; put "Table &tablename was unloaded and reload was attempted."; %end; %else %do; %put "&tablename is already loaded, leave it alone"; %end; %mend ifunloaded
08-29-2016 01:59 PM