Itération à travers deux tableaux de données de tailles différentes et comparaison des valeurs correspondantesSalut,
J'ai le problème suivant :
- J'ai deux tables de données dans des fichiers jmp séparés, chacun ayant une colonne.
- Une table est longue de 8 lignes tandis que l'autre est longue de 6440 lignes.
- Mon objectif est de parcourir chacune des valeurs du tableau à 8 lignes et de les comparer à chaque valeur du tableau à 6440 lignes pour voir si elles correspondent.
- Je me demandais simplement comment je pourrais faire cela parce que je veux parcourir les deux tables mais elles sont de tailles différentes. Je pensais utiliser une boucle for imbriquée mais je ne suis pas trop sûr.
Toute aide serait appréciée.
Re : Itérer dans deux tableaux de données de tailles différentes et comparer les valeurs correspondantesJ'ai fait une légère erreur dans mon exemple de pseudo-code précédent,
dtShort:Compare Column[i] > dtLong:Compare Column</CODE></PRE>
<P><SPAN>Doit être inversé dans la logique pour que cela fonctionne</SPAN></P>
<PRE><CODE class=" language-jsl"> dtLong:Compare Column > dtShort:Compare Column[i]
Voici un exemple de travail
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 : Itérer dans deux tableaux de données de tailles différentes et comparer les valeurs correspondantesMerci pour la réponse rapide.
Pour la partie suivante :
dtLong : Compare Column
Cela vous dérange-t-il d'expliquer comment je pourrais accéder à toutes les valeurs d'une colonne sans avoir à faire référence à chaque indice/index de la colonne ?
Re : Itérer dans deux tableaux de données de tailles différentes et comparer les valeurs correspondantesVoici comment je le traiterais .......
// 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 : Itérer dans deux tableaux de données de tailles différentes et comparer les valeurs correspondantesMerci pour votre réponse.
Comment suggéreriez-vous de résoudre le problème si je voulais vérifier si la valeur dans le tableau à 8 lignes est plus grand que la valeur de la table de 6440 lignes ?
Re : Itérer dans deux tableaux de données de tailles différentes et comparer les valeurs correspondantesJe pense que la façon la plus simple de procéder serait de laisser JMP faire le travail pour vous.Si vous joignez les tables dans une nouvelle table, vous pouvez demander à JMP de créer une nouvelle colonne appelée Indicateur de correspondance, qui vous indiquera si une correspondance a été trouvée ou non.
Tableaux==>Rejoindre