Focal Point
algorithm needed

This topic can be found at:
https://forums.informationbuilders.com/eve/forums/a/tpc/f/7971057331/m/9481092282

April 29, 2008, 03:11 PM
JohnB
algorithm needed
I have 6 numeric fields which contain numbers that are positive, negative, or zero.

I need to find the minimum absolute value that is not equal to zero for the following tests:
test_1: (field_A - field_B)
test_2: (field_C - field_B)
test_3: (field_D - field_E)
test_4: (field_F - field_E)


So if the value of the tests for one record are:
test_1: 5
test_2: 0
test_3: 456
test_4: -30


then :
test_1: ABS (field_A - field_B) = 5
test_2: ABS (field_C - field_B) = 0
test_3: ABS (field_D - field_E) = 456
test_4: ABS (field_F - field_E) = 30


The correct result would be 5, since it is the minimum of the absolute values that are not equal to zero.

Any ideas on how to code this? I seem to be stuck going in the wrong direction.

Thank you.


WF 7.7.03, Windows 7, HTML, Excel, PDF
April 29, 2008, 03:31 PM
Francis Mariani
Here's one part of the answer: use the MIN function.

An example:

TABLE FILE CAR
SUM
COMPUTE TEST_1/D10 = MIN(ABS(WIDTH), ABS(HEIGHT), ABS(LENGTH));
BY COUNTRY
END

To exclude the zero values, I would evaluate them to an unnaturally high number, so that they would never be returned by the MIN function. The only hole in this suggestion is if all the tests return as zero.

DEFINE FILE CAR
TEST1/D10 = IF WIDTH - HEIGHT EQ 0 THEN 999999999 ELSE WIDTH - HEIGHT;
TEST2/D10 = IF HEIGHT - SEATS EQ 0 THEN 999999999 ELSE HEIGHT - SEATS;
TEST3/D10 = IF WIDTH - LENGTH EQ 0 THEN 999999999 ELSE WIDTH - LENGTH;
END
TABLE FILE CAR
SUM
TEST1
TEST2
TEST3
COMPUTE TEST_A/D10 = MIN(ABS(TEST1), ABS(TEST2), ABS(TEST3));
BY COUNTRY
END



Francis


Give me code, or give me retirement. In FOCUS since 1991

Production: WF 7.7.05M, Dev Studio, BID, MRE, WebSphere, DB2 / Test: WF 8.1.05M, App Studio, BI Portal, Report Caster, jQuery, HighCharts, Apache Tomcat, MS SQL Server
April 29, 2008, 04:00 PM
JohnB
I was trying to avoid hardcoding the 999999999 (I have this aversion to hardcoding values), but it works better than not using it.

The all-zeros hole does need to be handled, but that's the easy part.

Thank you.


WF 7.7.03, Windows 7, HTML, Excel, PDF
April 29, 2008, 04:08 PM
Francis Mariani
I think this does it:

DEFINE FILE CAR
TEST1/D10 = IF WIDTH - HEIGHT EQ 0 THEN 999999999 ELSE WIDTH - HEIGHT;
TEST2/D10 = IF HEIGHT - SEATS EQ 0 THEN 999999999 ELSE HEIGHT - SEATS;
TEST3/D10 = IF WIDTH - LENGTH EQ 0 THEN 999999999 ELSE WIDTH - LENGTH;
END
TABLE FILE CAR
SUM
TEST1
TEST2
TEST3
COMPUTE TEST_A/D10 = 
  IF MIN(ABS(TEST1), ABS(TEST2), ABS(TEST3)) EQ 999999999 THEN 0 ELSE MIN(ABS(TEST1), ABS(TEST2), ABS(TEST3));
BY COUNTRY
END



Francis


Give me code, or give me retirement. In FOCUS since 1991

Production: WF 7.7.05M, Dev Studio, BID, MRE, WebSphere, DB2 / Test: WF 8.1.05M, App Studio, BI Portal, Report Caster, jQuery, HighCharts, Apache Tomcat, MS SQL Server
April 30, 2008, 09:38 AM
Leah
How hard would it be to eliminate the zero values at the start?


Leah