Thank you, looks promising. I am going to try this out soon and see if I can get it to work @andreas_lds wrote: Use proc compare with out=work.Differences and noprint. Differences are marked by X in char variables, and a value > 0 in numeric variables. Knowing this, you can create a new dataset containing flag-variables: flag_First_Name = (findc(First_Name, 'X') > 0);
/* ... */
flag_Zip = (Zip ^= 0); Drop the variables created by proc compare, except _obs_. Add the Flag-Dataset to the dataset containing the new values, example: data work.UpdateExtended;
set work.DifferencesExtended ;
set work.Update point=_obs_;
drop _obs_;
run; proc report with a compute-block creates the output: proc report data=work.UpdateExtended;
columns First_Name Last_Name Address City State Zip flag: dummy;
define First_Name / display;
define Last_Name / display;
define Address / display;
define City / display;
define State / display;
define Zip / display;
define flag_First_Name / noprint;
define flag_Last_Name / noprint;
define flag_Address / noprint;
define flag_City / noprint;
define flag_State / noprint;
define flag_Zip / noprint;
define dummy / computed noprint;
compute dummy / char;
array vars [6] $ _temporary_ ("_c1_" "_c2_" "_c3_" "_c4_" "_c5_" "_c6_");
array flags [6] _c7_ _c8_ c9_ _c10_ _c11_ _c12_;
do i = 1 to dim(flags);
if flags[i] then call define(vars[i], "style", "style=[background=yellow]");
end;
endcomp;
run; One problem remains: creating large (>30k obs) excel-files with ods excel is not possible.
... View more