Spécifier des colonnes à partir de tables de données distinctes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai l'intention d'écrire un script qui fera correspondre les valeurs d'une colonne du tableau de données 1, avec les valeurs les plus proches d'une colonne du tableau de données 2. Est-il possible d'écrire une plate-forme JSL pour autoriser les entrées de deux tables de données différentes ?Si non, quelqu'un connaît-il une bonne approche alternative ?
Re : Spécifier des colonnes à partir de tables de données distinctesMerci Jim!
Re : Spécifier des colonnes à partir de tables de données distinctesN Table() renvoie le nombre de tables de données ouvertes.
Vous pouvez les parcourir en boucle pour obtenir leurs noms
Pour(I=1, I<= N Table(),I++,
show(data table(I)<
);
Re : Spécifier des colonnes à partir de tables de données distinctesMerci Jim.Connaissez-vous une fonction qui renverra une liste de tables de données ouvertes ?
Re : Spécifier des colonnes à partir de tables de données distinctesIl n'y a aucune restriction sur le remplissage de 2 zones de liste de colonnes à partir de différentes tables de données dans la même fenêtre d'affichage.Si vous allez dans Help==>Scripting Index et regardez le 3ème exemple de la zone d'affichage, Col List Box(), vous verrez un exemple qui affiche les colonnes d'une table de données et vous permet de sélectionner une colonne.Cet exemple de script peut facilement être étendu pour être dans la même fenêtre d'affichage en dupliquant le code, mais en modifiant la référence "dt" de votre variable de référence vers votre deuxième table de données.
Re : Spécifier des colonnes à partir de tables de données distinctesSalut Jim,
Dans mon script final, j'aimerais créer un plate-forme qui peut être ajoutée à un complément, de sorte que l'utilisateur dispose d'une interface pour sélectionner les colonnes de dt1 et dt2. Est-ce possible?Si non, connaissez-vous une solution de contournement ?
// Exemple d'entrée de plateforme.
Noms par défaut ici ( 1 ) ;
dt = Tableau de données actuel () ;
Nouvelle fenetre ( "Fusionner par correspondance la plus proche" ,
<< Modal ,
Zone de texte ( "Sélectionner l'entrée" ) ,
Zone de liste H (
Panneau électrique ( "Sélectionnez la colonne dt1" , obtenirCols = Zone de liste de colonnes ( dt , Tous ) ) , // Récupère les colonnes de dt1.
// Ajoutez un script pour obtenir également les colonnes de dt2.
Zone de liste V (
Panneau électrique ( "colonne dt1" ,
Boîte de programmation ( Col N ( 2 ) ,
Boîte à boutons ( "Colonne dt1" , Col1 << Ajouter ( obtenirCols << Soyez sélectionné ) ) ,
Col1 = Zone de liste de colonnes ( Lignes N ( 1 ) , Nombre maximum d'articles ( 1 ) , Numérique )
)
) ,
Panneau électrique ( "colonne dt2" ,
Boîte de programmation ( Col N ( 2 ) ,
Boîte à boutons ( "Colonne dt2" , Col2 << Ajouter ( obtenirCols << Soyez sélectionné ) ) ,
Col2 = Zone de liste de colonnes ( Lignes N ( 1 ) , Nombre maximum d'articles ( 1 ) , Numérique )
)
)
)
)
) ;
Re : Spécifier des colonnes à partir de tables de données distinctesSalut Jim,
Merci pour le scénario ; Je vais probablement l'utiliser dans ma mise en œuvre.J'ai ajouté quelques lignes pour tenir compte des cas où les valeurs de dt1 sont en dehors des valeurs de dt2.
Noms par défaut ici ( 1 ) ;
// Ouvrir un exemple de table de données
dt = Ouvrir ( "$SAMPLE_DATA/capacité de semi-conducteur.jmp" ) ;
// Créez quelques tables de données pour montrer comment effectuer des recherches
// vers plusieurs tables
dt1 = dt << sous-ensemble ( lignes sélectionnées ( 0 ) , Colonnes ( npn1 ) ) ;
dt2 = dt << sous-ensemble ( lignes sélectionnées ( 0 ) , Colonnes ( npn2 ) ) ;
Fermer ( dt , nosave ) ;
// Trie le tableau pour trouver les valeurs les plus proches de
dt2 << trier ( par ( NPN2 ) , remplacer le tableau ( 1 ) ) ;
// Crée une colonne dans le premier tableau pour enregistrer le numéro de ligne
// depuis la deuxième table la plus proche
dt1 << Nouvelle colonne ( "Numéro de ligne le plus proche" ) ;
// Crée une colonne contenant les numéros de ligne dans la seconde
// table de données, elle peut donc être utilisée pour se joindre à la première table
dt2 << Nouvelle colonne ( "Numéro de ligne" , valeurs ( 1 :: N lignes ( dt2 ) ) ) ;
// Recherche la valeur de la deuxième table la plus proche de la
// valeur de la première table de données
Pour ( je = 1 , je <= N lignes ( dt1 ) , je ++,
La sélection = dt2 << obtenir des lignes où ( dt2 : NPN2 > dt1 : NPN1 [ je ] ) ;
Si ( N lignes ( La sélection ) == 0 ,
dt1 : Numéro de ligne le plus proche [ je ] = N lignes ( dt2 ) , // Ajouté pour le cas : TheSelected est vide
Si ( La sélection [ 1 ] > 1 ,
Si ( dt2 : NPN2 [ La sélection [ 1 ]] - dt1 : NPN1 [ je ] > dt1 : NPN1 [ je ] - dt2 : NPN2 [ La sélection [ 1 ] - 1 ] ,
dt1 : Numéro de ligne le plus proche [ je ] = La sélection [ 1 ] ,
dt1 : Numéro de ligne le plus proche [ je ] = La sélection [ 1 ] - 1
) ,
dt1 : Numéro de ligne le plus proche [ je ] = La sélection [ 1 ] ; // Ajouté pour le cas : TheSelected[1] == 1
)
) ;
) ;
// Joindre les tables en fonction de la valeur la plus proche trouvée
dtjoint = dt1 << Rejoindre (
Avec ( dt2 ) ,
Nom de la table de sortie ( "Valeurs les plus proches jointes" ) ,
Par colonnes correspondantes ( : Numéro de ligne le plus proche = : Numéro de ligne ) ,
Supprimer les multiples ( 0 , 0 ) ,
Inclure les non-correspondances ( 1 , 0 ) ,
Conserver l'ordre de la table principale ( 1 )
) ;
Re : Spécifier des colonnes à partir de tables de données distinctesVoici un exemple de script qui montre l’une des façons dont vous pouvez faire ce que vous recherchez :
Noms par défaut ici ( 1 );
// Ouvrir un exemple de table de données
dt = Ouvrir ( "$SAMPLE_DATA/capacité de semi-conducteur.jmp" );
// Créez quelques tables de données pour montrer comment effectuer des recherches
// vers plusieurs tables
dt1 = dt << sous-ensemble (lignes sélectionnées( 0 ), colonnes( npn1 ) );
dt2 = dt << sous-ensemble (lignes sélectionnées( 0 ), colonnes( npn2 ) );
Fermer ( dt, nosave );
// Trie le tableau pour trouver les valeurs les plus proches de
dt2 << trier ( par ( NPN2 ), remplacer table ( 1 ) );
// Crée une colonne dans le premier tableau pour enregistrer le numéro de ligne
// de la deuxième table la plus proche
dt1 << Nouvelle colonne ( "Numéro de ligne le plus proche" );
// Crée une colonne contenant les numéros de ligne dans la seconde
// table de données, elle peut donc être utilisée pour se joindre à la première table
dt2 << Nouvelle colonne ( "Numéro de ligne" , valeurs( 1 :: N lignes ( dt2 ) ) );
// Recherche la valeur de la deuxième table la plus proche de la
// valeur de la première table de données
Pour ( je = 1 , je <= N lignes ( dt1 ), je++,
LeSelected = dt2 << obtenir des lignes où ( dt2:NPN2 > dt1:NPN1 );
Si ( La sélection[ 1 ] > 1 ,
Si ( dt2:NPN2[La sélection[ 1 ]] -dt1:NPN1 > dt1:NPN1 - dt2:NPN2[La sélection[ 1 ] - 1 ],
dt1 : numéro de ligne le plus proche = La sélection[ 1 ],
dt1 : numéro de ligne le plus proche = La sélection[ 1 ] - 1
)
);
);
// Joindre les tables en fonction de la valeur la plus proche trouvée
dtjoint = dt1 << Rejoindre (
Avec (dt52), nom de la table de sortie ( "Valeurs les plus proches jointes" ),
En faisant correspondre les colonnes ( : numéro de ligne le plus proche = : numéro de ligne),
Supprimer les multiples ( 0 , 0 ),
Inclure les non-correspondances ( 1 , 0 ),
Conserver l'ordre de la table principale ( 1 )
);