- Suponiendo que la tabla de búsqueda (eficiencia) esté ordenada de menor a mayor en la columna IOUT
- Suponiendo que la tabla de búsqueda no sea muy grande. La metodología utilizada no es muy eficiente.
Este código debería funcionar bien.
/* Open a sample data table */
//dt = Open( "C:\Users\Test\Sample data\Sample1.jmp" );
dt = Data Table( "Sample1" );
/* Add a column for the assignment */
dt << New Column( "Efficiency", Numeric );
/* Open a lookup table */
//lt = Open( "C:\Users\Test\Sample data\efficiency_0.7.jmp" );
lt = Data Table( "efficiency" );
/* Loop through each row of the original data table */
For( i = 1, i <= N Rows( dt ), i++,
// Find the row with the closest IOUT value below the data value
theLowRow = Max( lt << get rows where( lt:IOUT <= dt:data[i] ) );
// Get the IOUT value for theLowRow
low = lt:IOUT[theLowRow];
// Find the row with the closest IOUT value above the data value
theHighRow = Min( lt << get rows where( lt:IOUT >= dt:data[i] ) );
// Get the IOUT value for theLowRow
high = lt:IOUT[theHighRow];
// Find the closest of these two values and write the Efficiency value
If( Abs( low - dt:data[i] ) < Abs( high - dt:data[i] ),
dt:Efficiency[i] = lt:low[theLowRow],
dt:Efficiency[i] = lt:low[theHighRow]
);
/*/* Obtain a matrix contining the row number of the lookup table
where the current falls within the range */
lowRange = lt << Get Rows Where(
Column( lt, "IOUT" )[] < Column( dt, "data" )[i] &
Column( dt, "data" )[i] <= Column( lt, "IOUT" )[]
);
/* Extract the row number from the matrix */
r = lowRange[1];
/* Assign the efficiency value to the original data table */
Column( dt, "Efficiency" )[i] = Column( lt, "low" )[r];*/
);Esta respuesta no es una solución sino una sugerencia sobre una dirección que podría tomar. Consulte las funciones matriciales JSL para conocer las métricas de distancia. De manera similar, podría utilizar una plataforma JMP que se base en la distancia para la aglomeración, como la agrupación o la discriminación.