mirror of
https://github.com/sasjs/core.git
synced 2025-12-10 22:14:35 +00:00
60 lines
1.8 KiB
SAS
60 lines
1.8 KiB
SAS
/**
|
|
@file
|
|
@brief Checks whether a feature exists
|
|
@details Check to see if a feature is supported in your environment.
|
|
Run without arguments to see a list of detectable features.
|
|
Note - this list is based on known versions of SAS rather than
|
|
actual feature detection, as that is tricky / impossible to do
|
|
without generating errs in most cases.
|
|
|
|
%put %mf_existfeature(PROCLUA);
|
|
|
|
@param [in] feature The feature to detect.
|
|
|
|
@return output returns 1 or 0 (or -1 if not found)
|
|
|
|
<h4> SAS Macros </h4>
|
|
@li mf_getplatform.sas
|
|
|
|
@version 8
|
|
@author Allan Bowe
|
|
**/
|
|
/** @cond */
|
|
%macro mf_existfeature(feature
|
|
)/*/STORE SOURCE*/;
|
|
%let feature=%upcase(&feature);
|
|
%local platform;
|
|
%let platform=%mf_getplatform();
|
|
|
|
%if &feature= %then %do;
|
|
%put No feature was requested for detection;
|
|
%end;
|
|
%else %if &feature=COLCONSTRAINTS %then %do;
|
|
%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;
|
|
%else 1;
|
|
%end;
|
|
%else %if &feature=PROCLUA %then %do;
|
|
/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */
|
|
%if &platform=SASVIYA %then 1;
|
|
%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;
|
|
%else %if "&SYSVLONG" < "9.04.01M3" %then 0;
|
|
%else 1;
|
|
%end;
|
|
%else %if &feature=DBMS_MEMTYPE %then %do;
|
|
/* does dbms_memtype exist in dictionary.tables? */
|
|
%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;
|
|
%else 1;
|
|
%end;
|
|
%else %if &feature=EXPORTXLS %then %do;
|
|
/* is it possible to PROC EXPORT an excel file? */
|
|
%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;
|
|
%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;
|
|
%else 0;
|
|
%end;
|
|
%else %do;
|
|
-1
|
|
%put &sysmacroname: &feature not found;
|
|
%end;
|
|
%mend mf_existfeature;
|
|
/** @endcond */
|