/*___________________________________________________________________ Ĥ MACRO: GETVARLIST Ĥ Ĥ JOB: Data Quality Ĥ Ĥ PROGRAMMER: Mahmoud Azimaee Ĥ Ĥ DATE: April 2011 Ĥ Ĥ DESCRIPTION: This is an intermediate macro and is used in many Ĥ Ĥ other DQ macros. For a given dataset this Macro Ĥ Ĥ creates two macro variables containing a list of Ĥ Ĥ all character and numeric variables separated by Ĥ Ĥ a blank: NVARLIST & CVARLIST . Ĥ Ĥ PARAMETERS: DS= Name of Dataset Ĥ Ĥ EXAMPLE: %GETVARLIST (health.MHCPL_SPsection_19922010); Ĥ ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ*/ **********************************************************************; %MACRO GETVARLIST(DS); %PUT ___________________________________________________________________; %PUT Ĥ Manitoba Centre for Health policy (MCHP) Ĥ; %PUT Ĥ MACRO: GETVARLIST Ĥ; %PUT Ĥ JOB: Data Quality Ĥ; %PUT Ĥ PROGRAMMER: Mahmoud Azimaee Ĥ; %PUT Ĥ DATE: April 2011 Ĥ; %PUT Ĥ Running for: &DS; %PUT ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ; %* Initialize macro variables to null; %GLOBAL NVARLIST CVARLIST LIB DSN; %LET LIB = ; %LET DSN = ; %LET NVARLIST=; %LET CVARLIST=; %***Single level data set name; %IF %INDEX(&DS,.) = 0 %THEN %DO; %LET LIB = WORK; %LET DSN = %UPCASE(&DS); %END; %***Two level data set name; %ELSE %DO; %LET LIB = %UPCASE(%SCAN(&DS,1,".")); %LET DSN = %UPCASE(%SCAN(&DS,2,".")); %END; %*Note: it is important for the libname and Data set name to be in upper case; %* Get list of numeric variables; PROC SQL NOPRINT; SELECT NAME INTO :NVARLIST SEPARATED BY " " FROM DICTIONARY.COLUMNS WHERE LIBNAME = "&LIB" AND MEMNAME = "&DSN" AND TYPE = "num"; %* Get list of character variables; SELECT NAME INTO :CVARLIST SEPARATED BY " " FROM DICTIONARY.COLUMNS WHERE LIBNAME = "&LIB" AND MEMNAME = "&DSN" AND TYPE = "char"; QUIT; %LET NVARLIST=%UPCASE(&NVARLIST); %LET CVARLIST=%UPCASE(&CVARLIST); %MEND GETVARLIST;