That never really gives me what I want though, so I use the following macro.
*Macro to compare data sets and produce the different columns/types;
%macro compare_data(dtset1, dtset2);
*Import the variable names, type, length and format from the sas dictionary tables;
data dataset1;
set sashelp.vcolumn;
where libname="WORK" and memname="%quote(%upcase(&dtset1))";
name=upcase(name);
keep name type length format;
run;
*Import the variable names, type, length and format from the sas dictionary tables;
data dataset2;
set sashelp.vcolumn;
where libname="WORK" and memname="%quote(%upcase(&dtset2))";
name=upcase(Name);
keep name type length format;
rename type=type2 length=length2 format=format2;
run;
proc sort data=dataset1; by name;
proc sort data=dataset2; by name;
run;
*Compare the variable types, format and names;
data comparison;
format check $50. data_source $50.;
merge dataset1 (in=a) dataset2 (in=b);
by name;
*Initially set all to verification status;
check="1-Check me"; *Should only show up when variables are in diff data sets;
if a and b then do;
if type=type2 and format=format2 then check="4 - Match"; *If matched of least interest;
if format ne format2 then check="3 - DIFF FORMAT"; *If diff format, note the formats so that it can be compared;
if type ne type2 then check= "2- DIFF TYPE"; *if diff types, note so that it can be fixed;
end;
*If variable is in one data set and not another set the dataset name;
if a and not b then data_source="&dtset1.";
else if b and not a then data_source="&dtset2.";
else if a and b then data_source="Both";
*Get rid of all labels;
attrib _all_ label="";
run;
*Sort by preference of order type;
proc sort data=comparison;
by check name;
run;
%mend;
... View more