JSL Calculer le temps écoulé dans la colonne par une variableBonjour,
Je me demande s'il est possible de créer une formule de colonne JSL pour calculer le nombre de jours entre l'observation d'un ID DANS la même colonne DATE (par exemple "Par ID, Calculer les jours écoulés par DATE").La sortie évaluerait la ou les apparitions du même ID et calculerait le temps écoulé entre chaque apparition du même ID.Il ne s'agit pas d'une comparaison de la colonne A à la colonne B, il s'agit d'une évaluation Dans la colonne A (dans la même colonne).
Notez que la première observation de tout ID sera vide car il n'y a pas de comparaison (première observation).Après la première observation, les calculs fonctionneraient 1er contre 2e... 2e contre 3e... et ainsi de suite.
Vous trouverez ci-dessous un projet de concept.Merci pour toute aide.
| IDENTIFIANT | DATE | ELAPSED_DAYS |
| ABC123 | 01/01/2021 | |
| ABC123 | 31/10/2021 | 303 |
| ABC123 | 30/06/2023 | 607 |
| EFG567 | 30/06/2021 | |
| EFG567 | 31/10/2021 | 123 |
| XYZ901 | 31/05/2021 | |
Automatisation et scriptScriptRe : JSL calcule le temps écoulé dans la colonne par une variableUtilisez Col Min() et Différence de date. Si vous avez vraiment besoin que la première observation soit une valeur manquante, vous pouvez ajouter une instruction if pour la vérifier
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(6),
Compress File When Saved(1),
New Column("ID",
Character,
"Nominal",
Set Values({"ABC123", "ABC123", "ABC123", "EFG567", "EFG567", "XYZ901"})
),
New Column("DATE",
Numeric,
"Continuous",
Format("m/d/y", 12),
Input Format("m/d/y"),
Set Values([3692304000, 3718483200, 3770928000, 3707856000, 3718483200, 3705264000])
),
New Column("ELAPSED_DAYS",
Numeric,
"Continuous",
Format("Best", 12),
Set Values([., 303, 607, ., 123, .])
)
);
dt << New Column("elapseddays", continuous, numeric, Formula(
Date Difference(Col Min(:Date, :ID), :Date, "day"))
);

Re : JSL calcule le temps écoulé dans la colonne par une variableJarmo,
Merci, si j'interprète correctement la fonction Col Min dans votre formule établirait la première observation (date la plus ancienne) de l'ID.
Cela peut être utile pour le temps total entre la première observation et la « nième » observation.
Cependant, j'aimerais également calculer l'observation la plus récente par rapport à l'observation précédente (temps écoulé entre chaque observation). Tels que la « nième » observation par rapport à la « nième - 1 » observation. Dans l'exemple ci-dessous, « ligne 2 par rapport à la ligne 3 » correspond à un temps écoulé de 607 jours (deuxième observation de l'ID par rapport à la troisième observation de l'ID).
Des pensées? Vos commentaires sont appréciés. Merci.

Re : JSL calcule le temps écoulé dans la colonne par une variableSi vous devez le faire dans une formule de colonne, vous avez besoin d'une variable locale. Utilisez cette colonne jsl :
New Column( "Elapsed_days",
Numeric,
"Nominal",
Format( "Best", 9 ),
Formula(
Local( {ResetRow = 1},
If(
Row() == 1, .,
:ID != Lag( :ID ), ResetRow == Row(),
(:Date - Lag( :Date )) / In Days( 1 )
)
)
)
)Re : JSL calcule le temps écoulé dans la colonne par une variableCette formule peut sembler un peu compliquée, mais elle utilise la moyenne mobile Col pour obtenir la valeur précédente de l'ID.
dt << New Column("elapseddays_new", continuous, numeric, Formula(
Date Difference(Col Moving Average(:Date, 1, 1, 0, :ID) * 2 - :Date, :Date, "day"))
);

Une autre bonne option serait d'utiliser Lag() et l'instruction if pour vérifier si l'ID a changé
Re: JSL calcule le temps écoulé dans une colonne par une variableLe moyen le plus simple est probablement de diviser votre colonne de date par ID, puis de faire tous vos calculs de date dans chacune des nouvelles colonnes, puis d'empiler à nouveau le tout.