Existe-t-il un moyen de faire en sorte que JMP évalue les formules de colonne en commençant par la ligne du bas, puis en remontant (par opposition à la première ligne par défaut)?
L'image ci-jointe est un exemple de formule que j'ai créée. Pour chaque ligne, il se remplit avec la valeur de la colonne "data", sauf si la valeur "data" est manquante; dans ce cas, il se remplit avec la valeur suivante dans la colonne «formule» (c'est-à-dire lui-même). Idéalement, je voudrais que les valeurs manquantes actuellement affichées dans la colonne nommée "formule" soient remplies avec "7", mais comme la formule est évaluée à partir de la ligne du haut, la valeur suivante de la colonne "formule" est manquante, jusqu'à ce qu'elle obtienne à la ligne 7. Si cette formule est évaluée en commençant par la ligne du bas et en remontant, alors Lag (: "formule", - 1) ne renverra jamais de valeurs manquantes. Pensées?
REMARQUE: Si je continue d'appuyer sur le bouton "Appliquer" dans l'interface graphique de la formule de la colonne, la colonne "formule" finit par remplir les "7" pour les lignes 1 à 7 une à la fois, mais je ne peux pas le faire plus applications complexes où je ne sais pas combien de lignes de données vides il y a.
Voici deux façons différentes de faire ce que vous voulez

Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 12 ),
New Column( "data",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., ., ., ., ., ., ., 7, 8, 9, 10, 11] )
)
);
// Method one
dt << New Column( "Row", formula( Row() ) );
dt:Row << delete formula;
dt << sort( by( :Row ), order( descending ), replace table( 1 ) );
dt << New Column( "formula1",
formula( If( Is Missing( :data ), Lag( :data ), :Data ) )
);
dt:formula1 << delete formula;
dt << sort( by( :Row ), order( ascending ), replace table( 1 ) );
dt << delete columns( {Row} );
// Method two
dt << New Column( "formula2",
formula(
If( Row() == 1,
dMat = :data << get as matrix;
fMat = Matrix( Index( 1, N Rows( dMat ) ) );
fMat[0] = .;
fMat = fMat`;
For( i = N Rows( fMat ), i >= 1, i--,
If( Is Missing( dMat[i] ),
fMat[i] = dMat[i + 1],
fMat[i] = dMat[i]
)
);
);
fMat[Row()];
)
);