Hello guys,
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?
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:
Proc sql;
create table u_name_it as select *
from dictionary.columns;
quit;
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.
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.
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:
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
Thanks for the replies, will look into each and every one today and let you know which one worked best.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
See how to use one filter for multiple data sources by mapping your data from SAS’ Alexandria McCall.
Find more tutorials on the SAS Users YouTube channel.