BookmarkSubscribeRSS Feed
pradeep_kadasi
Fluorite | Level 6

I am checking if a Library is assigned or not as per the code (at the end of this message)

As you can see, there are no statements assigning any libraries, but still when I check if the library was assigned, it shows assigned.

In the job I haven't assigned any of the libraries (RAMSN, CDC3, CDC4, CDC5, PUB, CLBP2), I deliberately removed the assignment statements to see if the logic works or not, it's not working. Not sure what's wrong.

 

Please check the log file attached for the same - "Libcheck-log.txt". I removed my ID details and replaced it with xxxx in the log, rest all is intact as it was generated.

 

 

SAS JOB - 

%include '/home/xxxx/temp/cred.sas';
%include '/home/xxxx/temp/ldap.sas';
Libname mylib '/home/xxxx/temp';

%Global RAMSNEXISTS CDC3EXISTS CDC4EXISTS CDC5EXISTS PUBEXISTS CLBP2EXISTS;
Options source source2 notes symbolgen mlogic mprint ;

%Macro RamsCheck(RAMSN);
%Let RAMSNEXISTS=0;
%IF %SYSFUNC(LIBREF(RAMSN))=0 %THEN %Let RAMSNEXISTS=1;
%Mend;
%Macro CDC3Check(CDC3);
%Let CDC3EXISTS=0;
%IF %SYSFUNC(LIBREF(CDC3))=0 %THEN %Let CDC3EXISTS=1;
%Mend;
%Macro CDC4Check(CDC4);
%Let CDC4EXISTS=0;
%IF %SYSFUNC(LIBREF(CDC4))=0 %THEN %Let CDC4EXISTS=1;
%Mend;
%Macro CDC5Check(CDC5);
%Let CDC5EXISTS=0;
%IF %SYSFUNC(LIBREF(CDC5))=0 %THEN %Let CDC5EXISTS=1;
%Mend;
%Macro PUBCheck(PUB);
%Let PUBEXISTS=0;
%IF %SYSFUNC(LIBREF(PUB))=0 %THEN %Let PUBEXISTS=1;
%Mend;
%Macro CLBP2Check(CLBP2);
%Let CLBP2EXISTS=0;
%IF %SYSFUNC(LIBREF(CLBP2))=0 %THEN %Let CLBP2EXISTS=1;
%Mend;

LIBNAME RAMSN CLEAR;
%RamsCheck(RAMSN);
LIBNAME CDC3 CLEAR;
%CDC3Check(CDC3);
LIBNAME CDC4 CLEAR;
%CDC4Check(CDC4);
LIBNAME CDC5 CLEAR;
%CDC5Check(CDC5);
LIBNAME PUB CLEAR;
%PUBCheck(PUB);
LIBNAME CLBP2 CLEAR;
%CLBP2Check(CLBP2);

%Put &RAMSNEXISTS.;
%Put VALUE IS %SYSFUNC(LIBREF(RAMSN));
%Put &CDC3EXISTS.;
%Put VALUE IS %SYSFUNC(LIBREF(CDC3));
%Put &CDC4EXISTS.;
%Put VALUE IS %SYSFUNC(LIBREF(CDC4));
%Put &CDC5EXISTS.;
%Put VALUE IS %SYSFUNC(LIBREF(CDC5));
%Put &PUBEXISTS.;
%Put VALUE IS %SYSFUNC(LIBREF(PUB));
%Put &CLBP2EXISTS.;
%Put VALUE IS %SYSFUNC(LIBREF(CLBP2));

 

2 REPLIES 2
Kurt_Bremser
Super User

Query DICTIONARY.LIBNAMES (SQL procedure) or SASHELP.VLIBNAM (data step, other procedures) instead when you need to check for a number of libraries.

 

You create macro variables inside your macros without declaring them global (%GLOBAL statement), so they are defined in the local symbol table and vanish as soon as the macro stops executing.

Tom
Super User Tom
Super User

Since in this macro

%macro RamsCheck(RAMSN);
%let RAMSNEXISTS=0;
%if %SYSFUNC(LIBREF(RAMSN))=0 %then %Let RAMSNEXISTS=1;
%mend;

you haven't et RAMSNEXISTS to either LOCAL or GLOBAL it will default to local if there is not already a macro variable with that name.  So to use the macro make sure to create the target macro variable before running the macro.

LIBNAME RAMSN CLEAR;
%let RAMSNEXISTS=Before macro call;
%RamsCheck(RAMSN);
%put &=RAMSNEXISTS;

It might be simpler to create a single macro to do the test.  Similar to this macro for using the FILEREF() function. https://github.com/sasutils/macros/blob/master/fileref.sas

 

Then your logic can instead be:

%let RAMSNEXISTS=%libref(RAMSN);
%let CDC3EXISTS=%libref(CDC3);
...

What result do you want when the libref is defined, but it is pointing at something that does not exist?

7     libname xxx 'c:\downloads';
NOTE: Libref XXX was successfully assigned as follows:
      Engine:        V9
      Physical Name: c:\downloads
8     %put %sysfunc(libref(xxx));
0
9     libname xxx clear;
NOTE: Libref XXX has been deassigned.
10    %put %sysfunc(libref(xxx));
70006
11    libname xxx 'c:\no such\directory';
NOTE: Library XXX does not exist.
12    %put %sysfunc(libref(xxx));
-70008
How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 5106 views
  • 0 likes
  • 3 in conversation