JSL : obtenir les valeurs uniques d'une colonne de table de donnéesSalut,
J'utilise actuellement la commande summary pour obtenir les valeurs uniques d'une colonne de tableau de données, ce qui, à mon avis, est trop compliqué pour cette tâche simple. Je pense qu'il doit y avoir une commande plus simple qui fonctionne sur une colonne de table de données ou un vecteur, mais je n'en trouve pas. Ai-je raison?
Mon code actuel ressemble à ceci :
// sample data set:
dt = New Table( "dt" );
dt:"Column 1" << setvalues( [1, 1, 2, 7, 7, 4, 5, 1, 5] );
// use summary to get unique values:
dt_sum = dt << summary( group( :Column 1 ), N, outputtablename( "dt_sum" ) );
unique_values = dt_sum:"Column 1" << getvalues;
Dahla
Re : JSL : obtenir des valeurs uniquesBonjour, quelle serait l'approche pour utiliser les clés du tableau pour sélectionner ou filtrer les lignes avec les mêmes clés, mais dans une table JMP différente. J'ai deux tables. L’un d’eux mappe les ID d’échantillon pour les tests chimiques à différents paramètres de facteurs (température, durée, numéro d’étude, etc.). J'obtiens avec succès les exemples d'ID dans un tableau. (Désolé, je suis totalement novice dans ce domaine.)
smplID = Associative array(:sampleid) << Get Keys;
Maintenant, je souhaite utiliser ces touches pour sélectionner des lignes dans le deuxième tableau (où se trouvent mes réponses), inverser la sélection de lignes et supprimer les lignes. Peut-être la solution ci-dessous, comme décrit ici, est mieux adapté pour commencer ?
Summarize(dt, smpleID = by(:sampleid));
Ou peut-être cette approche est préférable ?
dt << Summary (Group ( :sampleid ), Frequ( "None" ), Weight( "None" );
Quoi qu'il en soit, ce que je veux vraiment savoir, c'est comment utiliser l'une de ces approches pour nettoyer efficacement une table de données pour les lignes dont je n'ai pas besoin, avant de poursuivre l'analyse des données.
Edit : discuté et résolu ici .
Re : JSL : obtenir les valeurs uniques d'une colonne de table de donnéesEssayez de résumer ...
Summarize peut faire plus... voir la documentation sur les scripts.
Quelques inconvénients.
- Même si la colonne résumée peut être numérique, la liste renvoyée contient des valeurs de caractères.
- Par rapport à 1, la précision des valeurs numériques est tronquée en fonction de la largeur de la colonne.
// sample data set:
dt = newtable("dt");
dt:"Column 1" << setvalues([1, 1, 2, 7, 7, 4, 5, 1, 5]); summarize(unique_values=by(Column 1));
show(unique_values)
Mais... voici une solution de contournement aux inconvénients :
summarize(unique_values=by(Column 1), unique_numeric_values=(max(Column 1)));
show(unique_values, unique_numeric_values)
Re: JSL : obtenir des valeurs uniquesÉtudiez cet exemple :
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
values = dt:age << Get Values;
array = Associative Array( values );
array << Get Keys;
Re: JSL : obtenir des valeurs uniquesVous pouvez essayer Summarize(), puis parcourir simplement la liste renvoyée et modifier les valeurs de chaîne en numériques en utilisant la fonction num().
Vous pouvez créer une nouvelle colonne dans laquelle vous utilisez une formule
:variable * 100
puis convertissez les données au fur et à mesure qu'elles sortent du tableau associatif
Vous pouvez créer une nouvelle colonne, en convertissant les valeurs en caractèresRe: JSL : obtenir des valeurs uniquesMerci pour cette merveilleuse et courte solution @Mark_Bailey .
Cela fonctionne le plus souvent, mais pas dans le cas suivant :
values = {0.111, 0.222, 0.333}; // This is actually something like: values = Column(SomeList[1]) << Get Keys
N Items(Associative Array(values)) // gives 1
JMP ignore les décimales lors de la création du tableau associatif. (Avec JMP 12)
Comment puis-je résoudre ce problème en utilisant des tableaux accocatifs afin que N éléments renvoie 3 au lieu de 1 ?
Re: JSL : obtenir des valeurs uniquesMerci pour votre aide ! Summarize fonctionne parfaitement !
DahlaRe: JSL : obtenir des valeurs uniquesAussi:
unique values = Associative Array( col ) << Get Keys
Re: JSL : obtenir des valeurs uniquesSummarize fonctionne bien si vous souhaitez conserver les données dans un format de tableau de données.
Le tableau associatif tel que suggéré par @Mark_Bailey fonctionne bien si vous souhaitez travailler dans des listes.Re : JSL : obtenir les valeurs uniques d'une colonne de table de donnéesProposer une solution récapitulative pour les utilisateurs JMP du côté débutant (mon) du spectre.
Dans cet exemple, nous souhaitons obtenir une liste de produits finis uniques issus de commandes clients. Je ne vais pas lier la table et donner un nom à la table de sortie.
Dans le tableau de données d'origine, accédez à Tableaux -> Résumé

Faites glisser Terminé depuis les colonnes sélectionnées vers le groupe sur la droite.
Donnez un nom à la table de sortie, dans ce cas UniqueFG.
Décochez la case Lier au tableau de données d'origine.
Cliquez sur Action OK.

Le tableau de données résultant est une liste de tous les FG uniques et du nombre de lignes.
Cliquez sur Modifier le script source.
Cela ressemblera à quelque chose comme ça.
Data Table( "Test" ) <<
Summary(
Group( :Finished Good ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "UniqueFG" )
)
Copiez ce code.
Créez un nouveau script dans la table de données d'origine et collez-y le code. J'ai légèrement modifié le code pour le rendre plus flexible et évolutif, et je l'ai commenté ci-dessous.
//Creates a list of unique FG #s to feed to SAP to get unit weights and carton quantities
Names Default to Here(1);
dt = current data table();
dt <<
Summary(
Group( :Finished Good ), //this is the column from which you want unique values
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ), //this turns off table linking
output table name( "UniqueFG" ) // this is the name of the new datatable
)
Sauvegarder.
N'hésitez pas à me faire savoir si cette approche ou structure de code est ou non appropriée. Merci !