diff --git a/base/mf_getuniquelibref.sas b/base/mf_getuniquelibref.sas index c5eb387..b9d7efc 100644 --- a/base/mf_getuniquelibref.sas +++ b/base/mf_getuniquelibref.sas @@ -3,12 +3,12 @@ @brief Returns an unused libref @details Use as follows: - libname mclib0 (work); - libname mclib1 (work); - libname mclib2 (work); + libname mclib0 (work); + libname mclib1 (work); + libname mclib2 (work); - %let libref=%mf_getuniquelibref(); - %put &=libref; + %let libref=%mf_getuniquelibref(); + %put &=libref; which returns: diff --git a/base/mf_getvarcount.sas b/base/mf_getvarcount.sas index e2861ca..8687caf 100644 --- a/base/mf_getvarcount.sas +++ b/base/mf_getvarcount.sas @@ -2,31 +2,48 @@ @file @brief Returns number of variables in a dataset @details Useful to identify those renagade datasets that have no columns! + Can also be used to count for numeric, or character columns - %put Number of Variables=%mf_getvarcount(sashelp.class); + %put Number of Variables=%mf_getvarcount(sashelp.class); + %put Character Variables=%mf_getvarcount(sashelp.class,typefilter=C); + %put Numeric Variables = %mf_getvarcount(sashelp.class,typefilter=N); returns: > Number of Variables=4 - @param libds Two part dataset (or view) reference. + + @param [in] libds Two part dataset (or view) reference. + @param [in] typefilter= (A) Filter for certain types of column. Valid values: + @li A Count All columns + @li C Count Character columns only + @li N Count Numeric columns only @version 9.2 @author Allan Bowe **/ -%macro mf_getvarcount(libds +%macro mf_getvarcount(libds,typefilter=A )/*/STORE SOURCE*/; - %local dsid nvars rc ; + %local dsid nvars rc outcnt x; %let dsid=%sysfunc(open(&libds)); %let nvars=.; + %let outcnt=0; + %let typefilter=%upcase(&typefilter); %if &dsid %then %do; %let nvars=%sysfunc(attrn(&dsid,NVARS)); + %if &typefilter=A %then %let outcnt=&nvars; + %else %if &nvars>0 %then %do x=1 %to &nvars; + /* increment based on variable type */ + %if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do; + %let outcnt=%eval(&outcnt+1); + %end; + %end; %let rc=%sysfunc(close(&dsid)); %end; %else %do; %put unable to open &libds (rc=&dsid); %let rc=%sysfunc(close(&dsid)); %end; - &nvars + &outcnt %mend mf_getvarcount; \ No newline at end of file diff --git a/tests/crossplatform/mf_getvarcount.test.sas b/tests/crossplatform/mf_getvarcount.test.sas new file mode 100644 index 0000000..bdf23b9 --- /dev/null +++ b/tests/crossplatform/mf_getvarcount.test.sas @@ -0,0 +1,41 @@ +/** + @file + @brief Testing mf_getvarlist macro + +

SAS Macros

+ @li mf_getvarcount.sas + +**/ + +data work.all work.nums(keep=num1 num2) work.chars(keep=char1 char2); + length num1 num2 8 char1 char2 char3 $4; + call missing (of _all_); + output; +run; + +%mp_assert( + iftrue=(%mf_getvarcount(work.all)=5), + desc=%str(Checking for mixed vars), + outds=work.test_results +) +%mp_assert( + iftrue=(%mf_getvarcount(work.all,typefilter=C)=3), + desc=%str(Checking for char in mixed vars), + outds=work.test_results +) +%mp_assert( + iftrue=(%mf_getvarcount(work.all,typefilter=N)=2), + desc=%str(Checking for num in mixed vars), + outds=work.test_results +) +%mp_assert( + iftrue=(%mf_getvarcount(work.nums,typefilter=c)=0), + desc=%str(Checking for char in num vars), + outds=work.test_results +) +%mp_assert( + iftrue=(%mf_getvarcount(work.chars,typefilter=N)=0), + desc=%str(Checking for num in char vars), + outds=work.test_results +) +