Obtenir des entrées distinctes à partir d’une liste ?existe-t-il un moyen simple d'obtenir les entrées distinctes dans une liste ? (similaire au résumé d'un tableau en regroupant les colonnes afin d'obtenir des entrées distinctes dans cette colonne)
Le résultat pourrait être soit une liste réduite contenant uniquement les entrées distinctes (celles répétées supprimées) ou simplement un nombre indiquant le nombre d'entrées différentes.
Avant d'écrire un script, j'aimerais vérifier s'il existe une méthode/fonction/formule simple. Je n'ai rien trouvé dans l'aide de JMP...
Automatisation et scriptsAnalyse et modélisation de données de baseFusion et nettoyage des donnéesExploration et visualisation des donnéesRe : Obtenir des entrées distinctes à partir d'une liste ?Une façon consiste à utiliser un tableau associatif
names default to here(1);
// Create a list
dt=
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
genderList = :sex << get values;
// Get the distinct list of values
distinctList = (associative array(genderList))<<GET keys=""></GET>
{"F", "M"}
Re : Obtenir des entrées distinctes à partir d'une liste ?Génial, ça marche ! Merci beaucoup Jim !
Re : Obtenir des entrées distinctes à partir d'une liste ?L'approche via un tableau associatif est facile à écrire, à mémoriser et à appliquer.
Soyez prudent si vous souhaitez obtenir les valeurs distinctes d'une liste de millions de valeurs.
Une solution de contournement :
enregistrez les valeurs dans un tableau et utilisez soit résumer, soit les tableaux/résumé que vous avez mentionnés ci-dessus.
Peut-être qu'à l'avenir, il y aura un moyen direct/rapide dans JMP pour calculer des valeurs uniques ?
J'ai ajouté cet espoir comme sous-sujet aux catégories Col N - et à tous les autres...
S'il vous plaît soutenez l'idée et votez : )
Re : Obtenir des entrées distinctes à partir d'une liste ?En fait, mon problème est que je souhaite détecter des entrées uniques dans une séquence de chaînes dans une table. Voici un exemple joint : À l'origine, j'ai la colonne "séquence" (délimiteur arbitraire, ici le délimiteur est "|). Ma solution de contournement actuelle consiste à transformer cela en liste, puis à appliquer la solution de Jim avec le tableau associatif. Mais un moyen simple de calculer des valeurs uniques serait très apprécié...
Re : Obtenir des entrées distinctes à partir d'une liste ?Oh oui, c'est là que les tableaux associatifs font mal !
À la fin, vous comptez les entrées. Est-ce ce dont vous avez besoin ou avez-vous également besoin de l'étape intermédiaire (avec la liste des entrées uniques) ?
Un moyen rapide et facile de gérer des valeurs uniques - espérons que les développeurs de JMP reconnaîtront ce sujet comme quelque chose de vraiment utile. De telle sorte qu'il soit implémenté dans la prochaine version...
Re : Obtenir des entrées distinctes à partir d'une liste ?Pour mon application actuelle, je n'ai besoin que du nombre d'entrées distinctes, pas des valeurs elles-mêmes. Mais je pense qu'il pourrait y avoir de nombreuses autres situations dans lesquelles il serait utile de réduire une liste à ses entrées uniques.
Et oui, espérons une implémentation dans la prochaine version:)
Re : Obtenir des entrées distinctes à partir d'une liste ?Concernant la vitesse, je viens de vérifier si les étapes intermédiaires deviennent plus rapides si je remplace la partie tableau associatif par un simple
Si (ne contient pas(), insérer dans (maliste ... - aucun avantage.
New Column( "unique entries",
Expression,
Formula(
Local( {nr = N Rows( Current Data Table() )},
If( Row() == nr,
Caption( "done" )
);
Match( :variant,
1, Associative Array( :list from sequence[Empty()] ) << get keys,
2,
myList = {};
For Each( {entry}, :list from sequence,
If( !Contains( myList, entry ),
Insert Into( myList, entry )
)
);
myList;
);
)
)
)
pour 1 million de lignes, j'obtiens :

Donc 1:0 pour les tableaux associatifs. Une meilleure idée ?
[Another 2+2 seconds are needed for the columns :list from sequence and :N entrées uniques.
So, no real benefit to get into the ms regime for the intermediate step]
Re : Obtenir des entrées distinctes à partir d'une liste ?- facile
- rapide
et:
- pas gourmand
Je viens d'essayer de vérifier le timing avec 10 millions de lignes - et je suis resté bloqué.
JMP plante et les 60 dernières secondes ressemblent à ceci :

Re : Obtenir des entrées distinctes à partir d'une liste ?... alors, je viens de l'essayer avec 5 millions de lignes - et j'ai obtenu un aperçu intéressant :

Lorsque j'enregistre la table, ferme JMP et charge à nouveau la table, l'utilisation de la mémoire est nettement inférieure à ce qui est nécessaire pour calculer les valeurs !
À première vue, je pensais que c'était dû au tableau associatif, mais la même chose se produit lorsque j'utilise mylist .
Comment puis-je empêcher la formule de colonne de manger ma mémoire ?
TS-00177710
Re : Obtenir des entrées distinctes à partir d'une liste ?Pour info, voici une fonction de valeurs uniques que j'ai écrite il y a quelque temps :
/*
Function Name: get_unique_values
Description: Find the unique values in a list. Uses an associative array
Arguments:
in_list List to get unique values for
*/
Get_unique_values = Function( {in_list},
{Default Local},
tmp = [=> 0];
Insert Into( tmp, in_list );
tmp << get keys;
);
Exemples d'appels :
a = {1, 1, 1, 2, 3, 3, 3};
b = get_unique_values(a);
print(b);
c = {"Hello", "World", "John", "Ed", "John", "World"};
d = get_unique_values(c);
print(d);
Sortir:
{1, 2, 3}
{"Ed", "Hello", "John", "World"}Re : Obtenir des entrées distinctes à partir d'une liste ?À quel point vos séquences sont-elles complexes (sont-elles constituées d'une seule lettre ?) ? Savez-vous à l'avance ce qu'elles pourraient être ? Et quelle peut être la longueur de la séquence ?
Pour calculer simplement le nombre d'entrées, vous pouvez utiliser une combinaison de N éléments + tableau associatif et mots
N Items(Associative Array(Words(:sequence, "|")))
Partiellement lié Fournit un moyen rapide d'obtenir des valeurs uniques à partir d'objets JMP (colonnes, listes), éventuellement similaire à Set de Python
Re : Obtenir des entrées distinctes à partir d'une liste ?
@jthi wrote:N Items(Associative Array(Words(:sequence, "|")))
Peut-être que je me trompe, mais cette suggestion ressemble beaucoup à ce que @katharina_l a posté dans
https://community.jmp.com/t5/Discussions/Get-distinct-entries-from-a-list/mp/820530/highlight/true#M99918 ? ?
Re : Obtenir des entrées distinctes à partir d'une liste ?merci Holger et oui, cela ressemble vraiment à la fonction que je cherchais. Ce serait génial si elle pouvait être implémentée comme une fonction standard dans JMP.
Re : Obtenir des entrées distinctes à partir d'une liste ?Les catégories Col N seront livrées avec JMP19.
Pour obtenir des objets uniques, il existe un souhait distinct : attendre les Kudos.