Besoin de créer une colonne basée sur la séquence de variables apparaissant dans une autre colonneSalut tout le monde,
Je veux créer une colonne basée sur :Identité du client et combien de fois (un certain nombre de séquences compte pour 1 seul compte, voir le :Commentaire colonne), il apparaît dans l'ensemble de données. Mon exigence est : Exigence finale et serais heureux d'avoir : Colonne 1 obligatoire aussi. Je ne peux pas réorganiser/trier les données.
Une aide s'il vous plaît ?
Merci beaucoup, -HSS

Mélange et nettoyage des donnéesIngénierie Qualité et ProcédésRe : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonneUtiliser une requête SQL (en particulier GROUP_CONCAT ) ou les différentes opérations de table de JMP (diviser, transposer, texte en colonnes et combiner des colonnes, rejoindre) peuvent être plus faciles que la formule (et plus rapides), mais vous pouvez le faire avec une formule, par exemple en utilisant Loc() et indexation des différentes colonnes.
Edit : ajout d'une méthode interactive
Premières données fractionnées :

Transposez ensuite les données fractionnées :

À partir des données transposées, utilisez d'abord le texte dans les colonnes pour séparer Req2 et Region les uns des autres

Utilisez ensuite combiner les colonnes pour combiner les colonnes de ligne

Renommez et supprimez les colonnes inutiles et vous devriez vous retrouver avec quelque chose comme ceci

Rejoignez ceci avec les données originales2


Supprimez les colonnes supplémentaires et vous devriez avoir ce dont vous avez besoin.
Le journal amélioré peut avoir un script prêt pour vous, mais vous devrez peut-être le nettoyer un peu

Re : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonneSalut tout le monde,
Il existe une autre exigence : ajouter une colonne supplémentaire :Req_3 , où tous les textes de :Groupe seraient combinés et stockés. :Groupe le texte peut comporter jusqu’à 2 lignes. Le séparateur peut être n'importe quoi.
Le problème est que le nombre de cellules à combiner n'est pas fixe, cela dépend de la valeur dans la colonne. :Req_1.
"Req_3" est requis.
Toute aide, merci.

Re : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonne@jthi Merci pour votre aide.
Je vais travailler dans cette direction.
Re : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonneLa chose la plus simple est probablement de créer une nouvelle colonne, puis de l'utiliser comme regroupement au lieu de :Client_ID (formule originale)

Col Cumulative Sum(:"Concatenate[Region,Client_ID]"n != Lag(:"Concatenate[Region,Client_ID]"n), :"Concatenate[Region,Client_ID]"n)
Sinon, la partie qui est additionnée en somme cumulée devient plus compliquée assez rapidement (il peut y en avoir des plus simples que celle-ci, mais cela devrait gérer les mauvaises valeurs lors du changement de région) :
Col Cumulative Sum(
If(Row() == Col Minimum(Row(), :Client_ID, :Region),
1
,
:Client_ID != Lag(:Client_ID)
)
, :Client_ID, :Region
)
Re : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonne@jthi Col Cumulative Sum fonctionnera mais je ne parviens pas à trouver une initialisation correcte de la boucle/point de départ avec la variable de regroupement :Region.
Une autre suggestion ?
Merci
Col Somme cumulée ( :Client_ID != Lag( :Client_ID ) & :Region == Lag( :Region ), :Client_ID )
Re : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonneVous devrez d'abord créer une nouvelle colonne "regroupement" si vous souhaitez utiliser un tableau associatif comme celui-ci. Avec plusieurs colonnes de regroupement, il pourrait être plus facile d'utiliser Col Cumulative Sum (cela pourrait être toujours plus facile, je viens de trouver ceci). Vous devrez trouver une comparaison correcte et les regroupements
Col Cumulative Sum(:Client_ID != Lag(:Client_ID), :Client_ID)
Re : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonneSalut @jthi , Puis-je également effectuer le regroupement sur "Associated Array" en utilisant d'autres colonnes ? Quelque chose comme ça ? "Tableau associé (:Client_ID, :Region)" et mon ensemble de données contient plus de 700 000 lignes, la commande associée fonctionnera-t-elle toujours ! Si je peux regrouper par :Région , il peut encore contenir plus de 10 000 lignes. En tout cas, je vais certainement essayer ça.
Merci pour votre aide. Cordialement, -HSS
Re : Besoin de créer une colonne basée sur une séquence de variables apparaissant dans une autre colonneUtiliser un tableau associatif pour stocker la valeur, puis l'augmenter si nécessaire devrait fonctionner ici.
Formule pour la colonne 1 obligatoire :
As Constant(
aa = Associative Array(:Client_ID);
aa = Associative Array(aa << get keys, Repeat(0, N Items(aa)));
retval = 1;
);
If(:Client_ID != Lag(:Client_ID),
aa[:Client_ID]++;
);
aa[:Client_ID];
Et exigence finale :
Eval Insert("^:Client_ID^_^:Required Column 2^");
Exemple de script (utilise différents noms de colonnes) :
Names Default To Here(1);
dt = Open("$DOWNLOADS/data.jmp");
dt << New Column("Required Column 2", Numeric, Ordinal, Formula(
As Constant(
aa = Associative Array(:Client_ID);
aa = Associative Array(aa << get keys, Repeat(0, N Items(aa)));
retval = 1;
);
If(:Client_ID != Lag(:Client_ID),
aa[:Client_ID]++;
);
aa[:Client_ID];
));
dt << New Column("Final Requirement 2", Character, Ordinal, Formula(
Eval Insert("^:Client_ID^_^:Required Column 2^");
));
