Calculer la différence de colonne pour d'autres niveaux de colonne où le décalage varieJ'ai une colonne :EVENT (caractère-nominal) avec différentes valeurs. Également une autre colonne :datetime (numérique-continu). J'ai une colonne :datetime triée par ordre croissant. Je souhaite qu'une autre colonne calcule, à chaque fois qu'il y a un événement "CONNECT", quelle est la différence de temps entre celui-ci et le dernier événement "DISCONNECT". Le problème est que le décalage peut varier entre une CONNECT et la DISCONNECT précédente (voir photo ci-dessous) et je préférerais également conserver ce format de tableau haut. Une solution pour les dates et heures triées par ordre croissant est appréciée, mais le fait de ne pas les trier serait également bénéfique.

Analyse et modélisation de données de baseExploration et visualisation des donnéesRé: Calculer la différence de colonne pour d'autres niveaux de colonne où le décalage varieVous pouvez par exemple utiliser une variable dans la formule pour stocker la valeur de la dernière déconnexion
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
dt << New Column("Dif", Numeric, Continuous, Formula(
If(Row() == 1,
last_disc = .;
retval = .;
);
If(:E == "Disc",
last_disc = :T;
retval = .;
, :E == "Con",
retval = :T - last_disc
,
retval = .;
);
retval;
));

Ré: Calculer la différence de colonne pour d'autres niveaux de colonne où le décalage varieCette approche a très bien fonctionné, merci !
Ré: Calculer la différence de colonne pour d'autres niveaux de colonne où le décalage varieVous pouvez également utiliser des matrices
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
events = :E << get values;
times = :T << get values;
discs = Loc(events, "Disc");
cons = Loc(events, "Con");
difs = J(1, N Rows(dt), .);
difs[cons] = times[cons] - times[discs];
dt << new column("difs", numeric, continuous, values(difs));
Cela comporte un certain nombre d'hypothèses, mais peut être rendu plus robuste pour toutes sortes de cas limites (Loc Sorted peut être utile pour quelque chose comme ça, parfois même KDTable/VPTree).
Ré: Calculer la différence de colonne pour d'autres niveaux de colonne où le décalage variePour compliquer un peu les choses, il arrive parfois qu'un événement CONNECT apparaisse plusieurs fois avant qu'un événement DISCONNECT ne survienne. Dans ce cas, je souhaiterais que la différence ne soit calculée que sur le premier événement CONNECT qui apparaît après un événement DISCONNECT. Existe-t-il une légère modification du script qui puisse prendre en compte cela ? Merci encore pour votre aide.
Ré: Calculer la différence de colonne pour d'autres niveaux de colonne où le décalage varieVoici une modification du code @jthi qui devrait gérer cela.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
dt << New Column("Dif", Numeric, Continuous, Formula(
If(Row() == 1,
last_disc = .;
retval = .;
);
If(:E == "Disc",
last_disc = :T;
retval = .;
firstCon = .;
, :E == "Con",
If(ismissing(firstcon), firstcon=:t);
retval = firstcon - last_disc
,
retval = .;
);
retval;
));
Je vous suggère de prendre le temps de lire le Guide de script, disponible sous Aide JMP. Veuillez également prendre le temps d'étudier le code fourni par les membres du forum de discussion qui ont répondu. Les modifications apportées au script de Jarmo n'ont pas nécessité de nouvelles connaissances en matière de script. Il a seulement fallu ajouter une logique supplémentaire au flux du script. L'objectif de l'utilisateur devrait être de pouvoir apporter ses propres améliorations aux scripts.