AD0223 calculation error: CHG != AVAL - BASE

Hi Carol,

We cannot reproduce your false-positive messages using your example values.

Could you share your sample data?

Thank you,

Sergiy

sergiy at opencdisc dot org

Hi Sergiy,

Thank you for the follow-up. I looked into the data more and I think the issue relates to how SAS stores the numeric value. For instance, in SAS, the average value of 3.6 (i.e., average of 3.4 and 3.8) is not stored the same as an individual value of 3.6. The validation check fires because it thinks the change from baseline value should be 0, whereas the stored SAS value for CHG is 4.440892E-16. I’m not sure if there’s a work around this at all. Let me know if you would like a sample dataset and the report.

Thanks,

Carol

Hi Carol,

OpenCDISC engine should take care about this issue by rounding original values with some meaningful accuracy.

Please confirm that you are using any of the recent versions of validator?

Thank you,

Sergiy

Hi Sergiy,

Yes, I’m using validator 1.4.1.

Thanks,

Carol

Hi Sergiy,

We find we need to apply a precise rounding function, like

y=round(x, .0000000001)

and if we don’t do that, we hit the error for zero calculations. Should this be necessary, since you say OpenCDISC is supposed to handle it?

We are using validator 1.5.

Thanks,

Joan

Hi Joan,

I think OpenCDISC current algorithm has a bug. Actually it looks at two digits after a decimal point. That’s why in some cases you recieve false-positive messages. E.g., for numbers like 1234567 you need to provide accuracy up to 9 digits.

We’ll fix this bug soon.

Thanks,

Sergiy

Hi Sergiy,

The problem is still present in 2.0.2. Below is a small SAS program to reproduce the problem.

Cheers
– Thierry

data _null_;

  put / 'values in the dataset:';
  AVAL = input('4058E02850F3AA6E', hex16.);
  BASE = input('4058E0290C7CA5AC', hex16.);
  CHG = input('BF07711F67C00000', hex16.);
  delta = (AVAL - BASE) - CHG;
  put AVAL=32.29 / BASE=32.29 / CHG=32.29 / delta=;

  put / 'with values dispayed by SAS:';
  AVAL = 99.50246070666770000000000000000;
  BASE = 99.50250541851590000000000000000;
  CHG = -0.00004471184817589340000000000;
  delta = (AVAL - BASE) - CHG;
  put AVAL=32.29 / BASE=32.29 / CHG=32.29 / delta=;

  put / 'with values dispayed by OpenCDISC:';
  AVAL = 99.50246071;
  BASE = 99.50250542;
  CHG = -0.00004471;
  delta = (AVAL - BASE) - CHG;
  put AVAL=32.29 / BASE=32.29 / CHG=32.29 / delta=;

run;

result (SAS 9.2 32-bit):

values in the dataset:
AVAL=99.50246070666770000000000000000
BASE=99.50250541851590000000000000000
CHG=-0.00004471184817589340000000000
delta=0

with values dispayed by SAS:
AVAL=99.50246070666770000000000000000
BASE=99.50250541851590000000000000000
CHG=-0.00004471184817589340000000000
delta=-2.84218E-14

with values dispayed by OpenCDISC:
AVAL=99.50246071000000000000000000000
BASE=99.50250542000000000000000000000
CHG=-0.00004471000000000000000000000
delta=-1.16052E-14

Dear all,

The problem is still present in 2.2.0 too.

How is the rounding actually done in the validator when determining CHG ?

eg, AVAL=0.064835164800 , BASE=0.064676616900, CHG=0.000158547900 but the error still fires.

Thanks for looking into this,

Jeroen

Hello,

I’ve ran across a similar posting and I was hoping you could help me address this issue.
I still get this error in both validators, 1.4.1 and 1.5. My lab data is out to 12+ decimal places and uses average values for baseline, so CHG is super tiny. From the report below:

BASE, CHG, AVAL 11.58300018, -0.00000095, 11.58299923

Thanks,
Carol