/*___________________________________________________________________ Ĥ MACRO: GETFORMAT Ĥ Ĥ JOB: Data Quality Ĥ Ĥ PROGRAMMER: Mahmoud Azimaee Ĥ Ĥ DATE: April 2011 Ĥ Ĥ DESCRIPTION: For a given dataset this Macro creates a temporary Ĥ Ĥ sas dataset called contents(which is basically Ĥ Ĥ output of PROC CONTENTS). Also two macro variables Ĥ Ĥ NVFMT & CVFMT containing numeric and character Ĥ Ĥ variables with their formats separated by a blank Ĥ Ĥ will be created. Ĥ Ĥ PARAMETERS: DS= Name of Dataset Ĥ Ĥ EXAMPLE: %GETFORMAT (health.MHCPL_SPsection_19922010); Ĥ ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ*/ **********************************************************************; %MACRO GETFORMAT(DS); %PUT ___________________________________________________________________; %PUT Ĥ Manitoba Centre for Health policy (MCHP) Ĥ; %PUT Ĥ MACRO: GETFORMAT Ĥ; %PUT Ĥ JOB: Data Quality Ĥ; %PUT Ĥ PROGRAMMER: Mahmoud Azimaee Ĥ; %PUT Ĥ DATE: April 2011 Ĥ; %PUT Ĥ Running for: &DS; %PUT ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ; %* Initialize macro variables to null; %GLOBAL NVFMT CVFMT; %LET LIB = ; %LET DSN = ; %***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; proc contents data=&LIB..&DSN out=contents noprint; run; data contents; set contents ; if format^='' then FMT=CATX(" ",name,CATS(format,formatl,'.')); if format^='' then Format=CATS(format,formatl,'.'); if (index(name,'PHIN')^=0 | index(name,'phin')^=0) & format='Z15.' then phin=1; else phin=0; NAME=UPCASE(NAME); keep name type length label format formatl informat informd FMT phin; rename name=varname; run; proc sql noprint; select FMT into :NVFMT separated by " " from contents where type=1; quit; proc sql noprint; select FMT into :CVFMT separated by " " from contents where type=2; quit; proc sort data=contents; by varname; run; %MEND GETFORMAT;