@Astounding wrote:
I would advise you to stay away from the ROUND function on each of the values. It will not always give you the result you want. For example:
tolerance = 0.01;
x = 2.004;
y = 1.993;
If you round each variable separately, you'll get 2 - 1.99 which is TRUE. But the difference between them is 0.011 which is FALSE. Instead, take the absolute value of the difference and compare that to your tolerance level. It's a little clumsy, but you could try:
length result $ 5;
if x = y = . then result = 'TRUE';
else if x=. then result = 'FALSE';
else if y=. then result = 'FALSE';
else do;
if abs(x - y) <= tolerance then result='TRUE';
else result='FALSE';
end;
There may be slicker ways to code this, but stay away from ROUND.
Nice thing abou this is if you have a changing tolerance it is easier to use by supplying the tolerance value as part of the incoming data.
I might suggest a 1/0 coding instead of "True"/"False" as if you take the mean of the 1/0 then you get a percentage of in tolerance or sum a count of within tolerance not to mention use in some modeling approaches.
With either approach I might suggest that x=. or y=. is missing instead of coded as "False" as someone could mistake that with the result of an actual comparison between two values.
... View more