mirror of
https://github.com/sasjs/core.git
synced 2026-01-05 08:30:06 +00:00
feat: new mf_existfunction macro
This commit is contained in:
33
base/mf_existfunction.sas
Normal file
33
base/mf_existfunction.sas
Normal file
@@ -0,0 +1,33 @@
|
||||
/**
|
||||
@file
|
||||
@brief Checks if a function exists
|
||||
@details Returns 1 if the function exists, else 0
|
||||
Usage:
|
||||
|
||||
%put %mf_existfunction(CAT);
|
||||
%put %mf_existfunction(DOG);
|
||||
|
||||
Full credit to [Bart](https://sasensei.com/user/305) for the vfunc pointer
|
||||
and the tidy approach for pure macro data set filtering.
|
||||
Check out his [SAS Packages](https://github.com/yabwon/SAS_PACKAGES)
|
||||
framework!
|
||||
|
||||
@param [in] name (positional) - function name
|
||||
|
||||
@author Allan Bowe
|
||||
**/
|
||||
/** @cond */
|
||||
|
||||
%macro mf_existfunction(name
|
||||
)/*/STORE SOURCE*/;
|
||||
|
||||
%local dsid rc exist;
|
||||
%let dsid=%sysfunc(open(sashelp.vfunc(where=(fncname="%upcase(&name)"))));
|
||||
%let exist = %sysfunc(fetch(&dsid, NOSET));
|
||||
%let rc = %sysfunc(close(&dsid));
|
||||
|
||||
%sysevalf(0 = &exist)
|
||||
|
||||
%mend mf_existfunction;
|
||||
|
||||
/** @endcond */
|
||||
22
tests/crossplatform/mf_existfunction.test.sas
Normal file
22
tests/crossplatform/mf_existfunction.test.sas
Normal file
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mf_existfunction macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mf_existfunction.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(%mf_existfunction(CAT)=1),
|
||||
desc=Checking if CAT function exists,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(%mf_existfunction(DOG)=0),
|
||||
desc=Checking DOG function does not exist,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user