Iterando a través de dos tablas de datos de diferentes tamaños y comparando valores coincidentesHola,
Tengo el siguiente problema:
- Tengo dos tablas de datos en archivos jmp separados, cada uno de los cuales tiene una columna.
- Una tabla tiene 8 filas de largo, mientras que la otra tiene 6440 filas de largo.
- Mi objetivo es revisar cada uno de los valores de la tabla de 8 filas y compararlos con cada valor de la tabla de 6440 filas para ver si coinciden.
- Me preguntaba cómo podría hacer esto porque quiero recorrer ambas tablas pero son de diferentes tamaños. Estaba pensando en usar un bucle anidado para pero no estoy muy seguro.
Cualquier ayuda sería apreciada.
Re: Iterando a través de dos tablas de datos de diferentes tamaños y comparando valores coincidentesCometí un ligero error en mi ejemplo de pseudo código anterior,
dtShort:Compare Column[i] > dtLong:Compare Column</CODE></PRE>
<P><SPAN>Necesita ser revertido en lógica para que funcione</SPAN></P>
<PRE><CODE class=" language-jsl"> dtLong:Compare Column > dtShort:Compare Column[i]
Aquí hay un ejemplo de trabajo.
Names Default To Here( 1 );
dtLong = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Create the short data table
dtShort = New Table( "Short",
New Column( "Target Age", values( {12, 16} ) ),
New Column( "Match", character, values( {"Teenager", "Young Adult"} ) )
);
// Sort the data for illustration of data not being
// in age order
dtLong << sort( by( :Name ), replace table( 1 ) );
// Create a couple of new columns in the data table
dtLong << New Column( "Kind Of Match", character );
dtLong << New Column( "Count" );
// Process the data
For( i = 1, i <= N Rows( dtShort ), i++,
// Find all rows that match the Where Clause
theRowsFound = dtLong << get rows where( dtLong:Age > dtShort:Target Age[i] );
// If some rows were found process
If( N Rows( theRowsFound ) > 0,
// Set a value in the dtLong data table with one statement
// that sets values in multiple rows
dtLong:Kind Of Match[theRowsFound] = dtShort:Match[i];
// Now set values row by row for individual rows that were found
theCount = 1;
For( k = 1, k <= N Items( theRowsFound ), K++,
dtLong:Count[theRowsFound[k]] = theCount;
theCount = theCount + 1;
);
);
);Re: Iterando a través de dos tablas de datos de diferentes tamaños y comparando valores coincidentesGracias por la rápida respuesta.
Para la siguiente parte:
dtLong : Compare Column
¿Te importa explicar cómo podría acceder a todos los valores en una columna sin tener que hacer referencia a cada subíndice / índice de la columna?
Re: Iterando a través de dos tablas de datos de diferentes tamaños y comparando valores coincidentesAquí es cómo lo procesaría .......
// This is pseudo code, but it will give you an idea of the flow
dtShort = Open( "<YOUR short="" data="https://community.jmp.com/" table="">" );
dtLong = Open( "<YOUR long="" data="https://community.jmp.com/" table="">" );
For( i = 1, i <= N Rows( dtShort ), i++,
theRowsFound = dtLong << get rows where( dtShort:Compare Column[i] > dtLong:Compare Column );
If( N Rows( theRowsFound ) > 0,
// Do your processing
);
);</YOUR></YOUR>
Re: Iterando a través de dos tablas de datos de diferentes tamaños y comparando valores coincidentesGracias por su respuesta.
¿Cómo sugeriría abordar el problema si quisiera comprobar si el valor en la tabla de 8 filas es mayor que el valor en la tabla de 6440 filas?
Re: Iterando a través de dos tablas de datos de diferentes tamaños y comparando valores coincidentesCreo que la forma más fácil de hacer esto sería dejar que JMP haga el trabajo por usted. Si une las tablas a una nueva, puede hacer que JMP cree una nueva columna llamada indicador de coincidencia, que le indicará si se encontró una coincidencia o no.
Tablas ==> Unirse