comment créer deux boucles imbriquées ?Salut - J'essaie d'écrire un script qui suit ce flux de travail :
1 - commencer une boucle à une certaine date-heure de début (par exemple, le 1er octobre 2021 à 11h00).Je vais appeler cela la ligne n.Obtenez la valeur de col1[ligne n].
2 - aller à la ligne suivante, n+1. définir col2 = col1 [n+1] - col1[n].
3 - aller à la ligne suivante, n+2, définir col2 = col1 [n+2] - col1[n]
4 - aller à la ligne suivante, n+3, définir col2 = col1[ n+3] - col1[n].Continuez à parcourir chaque ligne suivante jusqu'à ce que datetime[n+k] = datetime[n] + 7 jours.(Notez que k variera en fonction de l'incrément de temps entre les lignes au fur et à mesure que la boucle progresse ; par exemple, le temps augmente d'une ligne à l'autre de 5 minutes, 15 minutes, 1 heure, etc., selon la ligne en question.)
5 - Répétez les étapes 1 à 4 pour chaque nouvelle semaine de données en utilisant une nouvelle "date de début" obtenue à l'étape 4. Continuez à parcourir 7 jours de données supplémentaires.
6 - Répétez l'étape 5 jusqu'à ce que la table de données manque de lignes.
L'objectif est de faire des calculs sur les données col1 qui comparent la valeur d'une semaine de lignes à la première ligne de cette semaine, puis de répéter cela encore et encore pour chaque semaine suivante (semaine 2, semaine 3, semaine 4, etc.) jusqu'à ce que tout les lignes ont été traitées.: )
ScriptRe : comment créer deux boucles imbriquées ?Pouvez-vous donner un petit tableau de données avec ce que vous attendez des données ?Ou du moins à quoi ressemble la table de données que vous utilisez ? Il semble qu'une formule de colonne serait une solution plus simple.
Re : comment créer deux boucles imbriquées ?Je pense que vous pourriez dire quelque chose comme ça?
Names default to here(1);
dt = New Table( "Untitled 1133",
Add Rows( 5 ),
New Column( "Week1",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week2",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week3",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
)
);
nc = ncols(dt);
for(i=1, i<=nc, i++,
col_name = column(i) << Get Name(); // get the original column name
Eval(EvalExpr( // you have to do this so you can substitute in the actual col_name instead of a variable
dt << New Column(col_name || " comparison",
// just take current row minus first row
formula(Expr(column(dt, col_name))[row()]-Expr(column(dt, col_name))[1])
)
));
);
Re : comment créer deux boucles imbriquées ?Sûr.Merci.Ci-joint un extrait d'un ensemble de données que j'ai créé dans Excel à titre d'exemple.
Re : comment créer deux boucles imbriquées ?Merci Vince.Je passe par là maintenant ... en tant que débutant JSL (!) J'ai quelques questions qui m'aideront à suivre votre approche.Pourquoi 5 lignes ont-elles été ajoutées à une nouvelle table de données ?Pourquoi avez-vous eu besoin de "définir des valeurs" et pourquoi ces cinq chiffres ont-ils été sélectionnés ?Votre script dure 3 semaines, mais mon jeu de données réel a environ 120 semaines.
Enfin, comment le script sait-il quelle colonne est la valeur sur laquelle calculer (c'est-à-dire "flux" dans mon exemple) ?(Ma table de données a plus de colonnes que les trois montrées dans mon exemple.) Ne serait-il pas plus facile d'attribuer le nom de la colonne plutôt que de basculer entre les colonnes ?Il me manque probablement quelque chose ici.