Here's a SAS function I wrote in C using SAS/TOOLKT that addresses the floating point equality problem previously discussed here.

It is pretty straightforward and uses the algorithm based on this SAS TS Note.

`%MACRO FUZZCOMP(X,Y,EPS=1E-12);`

(ABS(&X-&Y) LE &EPS*MAX(ABS(&X),ABS(&Y)))

%MEND;

You can find it and a couple other functions I have written here.

As an aside, is there any interest out there in knowing how to write user-written functions in C for the SAS System using SAS/TOOLKT? I know SAS/TOOLKT isn't the *sexiest* SAS product (that would be JMP), but it can be quite useful writing specific functions in a lower-level language like C. If there is any interest I could put something formal together for a paper or even just put a tutorial up on the web.

I would be interested in seeing a basic tutorial on SAS/Toolkit. Also - I have never programmed in C, so how hard would it be to learn enough C to make something useful with SAS/Toolkit?

ReplyDelete