Ajouter un compteur pour les cas uniques dans les groupesSalut tout le monde,
Comment puis-je écrire un compteur de valeurs entières pour incrémenter des valeurs uniques dans la colonne B du groupe A, pour ce faire ?

Voici ce que j'ai essayé jusqu'à présent :
dt_Table1 = Data Table("Table1");
dt_Table1 << New Column("Dataset", Numeric, "Nominal", Set Selected);
Sum1 = dt_Table1 << Summary(Group(:Group, :Date));
Sum2 = Sum1 << Summary(Group(:Group));
:N Rows << Set Name("N Datasets in Group");
dt_Table1 << Update(
with(Data Table(Sum2)),
Merge Same Name Columns
Match Flag(0),
Suppress foruma evaluation(0),
By Matching Columns(:Group = :Group),
Drop multiples(1, 0),
Include Nonmatches(0, 0),
Preserve main table order(1)
);
dt = dt_Table1;
For(i = 1, i <= :N Rows(dt), i++,
While(Group_Number = GetValue(:Group[i]),
N == Get Value(dt, :N Datasets in Group[i]),
For(j = 1, j <= N, j++,
:Dataset << Set Value == (j),
),
Group_Number = Group_Number + 1,
),
);
Les sorties:


Automatisation et scriptAnalyse et modélisation de données de baseRe : Ajouter un compteur pour les cas uniques dans les groupesVous devriez pouvoir le faire avec une combinaison de fonctions Col Rank(), Col Cumulative Sum, Col Min(), etc. Sur la base de votre exemple, Col Rank() ou Col Cumulative Sum(1, ) devrait suffire (il n'y a pas de dates en double dans aucun des groupes).
La colonne 3 utilise Col Rank et la colonne 4 Col Cumulative Sum et la colonne 5 une option d'une formule un peu plus compliquée
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(8),
Compress File When Saved(1),
New Column("g", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 1, 2, 2, 2, 2])),
New Column("d", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("r", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Formula(Col Rank(:d, :g))),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Formula(Col Cumulative Sum(1, :g)))
);
dt << New Column("Column 5", Numeric, Continuous, Formula(
Col Cumulative Sum(
If(Row() == Col Min(Row(), :g, :d),
1
,
.
),
:g
)
));

Re : Ajouter un compteur pour les cas uniques dans les groupesMerci Jarmo !Votre chemin est définitivement plus propre.Je ne suis pas totalement la logique, mais je vois que ça marche!
Remarque : J'ai trouvé un autre moyen, qui utilisait également Col Cumulative Sum().Plus lent que le vôtre.Plusieurs sous-tables et une jointure...
Résumé1 = Table1 << Résumé(Groupe(:Groupe, :Date));
Résumé2 = Résumé1 << Résumé(Groupe(:Groupe, :Date));
Summary2 << Nouvelle colonne( "Ensemble de données",
numérique,
"Nominal",
Définir la sélection
);
:Dataset << Formula(Col Cumulative Sum( :N Rows, :Group ) );
//Joindre au tableau 1
Tableau1 << Rejoindre(
avec (tableau de données (résumé2)),
Tout sélectionner),
SélectionnezAvec(
:Base de données
),
Par colonnes correspondantes ( :Run = :Run ),
Déposez les multiples( 1, 0 ),
Inclure les non-correspondances (0, 0),
Préserver l'ordre de la table principale( 1 ),
Nom de la table de sortie( "Table2" )
);
Re : Ajouter un compteur pour les cas uniques dans les groupesJe fais une nouvelle colonne avec cette formule.
Si ( Ligne () == 1 ,
1 ,
Si ( :identifiant == Décalage ( :IDENTIFIANT, 1 ),
Décalage ( : Nom ( "Compte d'identité" ) ) + 1 , 1 ))
Cela suppose que votre colonne "ID" est triée de manière séquentielle.
la colonne Count of ID, est le nom de la nouvelle colonne avec la formule ci-dessus
Re : Ajouter un compteur pour les cas uniques dans les groupesHm, il semble qu'il manque un élément à l'éditeur de formule Catégories du Col N fonctionner avec une option GroupBy.
Wish attend des félicitations :
nouvelle fonction JSL : Col N Catégories
Re : Ajouter un compteur pour les cas uniques dans les groupesVoici un petit script qui produit le nombre de valeurs uniques trouvées dans la colonne B, dans la colonne A
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
charList = {"A","B","C","D","E","F","G","H","I","J"};
dt << add rows(25);
for each row(
:A = char(random integer(1,5));
:B = charList[random integer(1,10)]
);
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :p</img> ) ) );
N Items( Loc( bygroup[1], :a ) );
)
);Re : Ajouter un compteur pour les cas uniques dans les groupesbonne solution de contournement 
(p -> b)
mais les disparus Catégories du Col N c'est encore douloureux. Peut-on ajouter un fonction personnalisée Catégories du Col N (: col, <{...}>)
la liste facultative pourrait être utilisée pour spécifier les colonnes/sous-groupes utilisés comme by - comme le :a dans l'exemple précédent.
Qui sait comment dans la fonction de synthèse les colonnes peuvent être référencées ?
Fonction personnalisée - comment référencer la colonne
Re : Ajouter un compteur pour les cas uniques dans les groupesHabituellement, une combinaison étrange de différentes fonctions Col Something() peut également être utilisée (ce n'est peut-être pas la plus rapide en raison de la comparaison effectuée et si je me souviens bien, vous ne devriez pas utiliser les fonctions Col de cette façon même si c'est l'un des meilleurs moyens de les utiliser).
dt << New Column("C", Formula(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
Re : Ajouter un compteur pour les cas uniques dans les groupes
Peut-on ajouter un fonction personnalisée Catégories du Col N (: col, <{...}>)
Pas de manière propre et agréable Création d'une fonction statistique personnalisée (formule) qui a byVar , Option ou fonction pour évaluer une formule de colonne personnalisée en même temps ou mettre en cache les valeurs entre les lignes
Re : Ajouter un compteur pour les cas uniques dans les groupes
@jthi a écrit:
Pas de manière propre et agréable
Aie!
Je voulais ajouter la coutume Catégories du Col N fonction pour l'avoir disponible dans le menu contextuel Nouvelle colonne de formule.
Donc, si cela nécessite des Expr() Expressions autour des colonnes lors de l'appel de la fonction, il n'y a AUCUNE chance d'y parvenir ?
Argh....
Vraiment étonnant qu'il faille autant de temps pour ajouter les manquants Catégories du Col N 
Re : Ajouter un compteur pour les cas uniques dans les groupesincroyable!
Selon la structure du tableau, plusieurs ordres de grandeur plus rapides 
mais encore loin d'une solution pour le clic-droit Nouvelle colonne de formule menu 
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
dt << add rows(20000);
for each row(
:A = char(random integer(1,5));
:B = char(random integer(1,1000));
);
t0 = hptime();
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :b) ) );
N Items( Loc( bygroup[1], :a ) );
)
);
(hptime() -t0)/1000000; //~ 1min
t0 = hptime();
dt << New Column("C", set each value(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
(hptime() -t0)/1000000; // < 1secRe : Ajouter un compteur pour les cas uniques dans les groupesbonne nouvelle : JMP19 fournira Col N Unique() :
https://community.jmp.com/t5/JMP-Wish-List/Col-N-Categories/idc-p/870972/highlight/true#M7292
et il sera disponible via le nouveau menu de la colonne de formule :
