Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Chère communauté JMP,
(W10, 64 bits, JMP 15.0 Pro)
J'ai un grand tableau de données importé à partir d'un fichier Excel et j'ai besoin d'avoir des lignes vides d'une colonne remplies avec les entrées de la liste précédente. J'essaie d'écrire du JSL pour passer d'une colonne de gauche à celle de droite, comme indiqué ci-dessous :

Je pense que cela devrait être assez facile à coder, mais le problème que je rencontre est de m'arrêter correctement à la fin du produit précédent et de commencer par le nouveau produit. Je ne dois pas faire une boucle correctement.
Toute suggestion/aide est la bienvenue.
Merci!,
DS
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Quelques ingénieurs système de JMP tournaient en rond sur ce problème et c'était la meilleure solution. Cette version finale de @Brady Brady est plus rapide et plus robuste que la formule simple avec laquelle nous avons commencé. Je l'utilise depuis des années et je trouve qu'il fonctionne bien dans un certain nombre de situations. Content que ça ait fonctionné pour toi !
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Salut @Byron_JMP ,
Merci pour le code d'ajustement du script dans votre message précédent. Celle-ci est meilleure que ma solution car elle vérifie si la première entrée de la colonne est manquante et si c'est le cas, elle la remplace par l'entrée existante suivante, ce qui, selon moi, se produit dans quelques importations que j'apporte. Je n'ai pas d'expérience avec certaines des solutions de script, telles que la façon dont vous utilisez les informations vec et matricielles pour rechercher certaines choses. Quoi qu'il en soit, je l'ai appliqué à mon problème spécifique et il l'a résolu sans problème.
Merci!,
DS
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Je ne trouve pas la fonction ou le message JSL qui effectue la même opération. Je ne pense pas que cela existe. Il existe une fonction Main Menu() mais cette commande est associée à la colonne sélectionnée, pas au menu principal de JMP.
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Je ne connais pas le code JSL derrière la solution interactive. Cela devrait aller puisque vous avez plusieurs options là-bas.
Je sais que la solution interactive, comme certains scripts, peut être appliquée simultanément à plusieurs colonnes. Sélectionnez simplement toutes les colonnes et cliquez avec le bouton droit, choisissez l'option Remplir.
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Voici quelques notes JSL qui vous aideront si vous créez un script pour la solution
//better version of Fill in Missing Cells, by Brady Brady
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
///////////////////////////// short tweak for scripting
dtcollist=dtnr<<GET column="" names=""></GET>
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?il existe un complément vraiment fantastique, un incontournable appelé outils de table de données
il y a un outil d'interpolation qui fait cela, et bien plus encore. De plus, c'est beaucoup plus rapide que les formules sur les grandes tables.

Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Salut @Dan_Obermiller ,
Merci pour cette information. J'ai vu le motif Remplir jusqu'à la fin, pour rangée ou remplir, mais pas avant.
Connaissez-vous le code JSL qui fait ça ? La raison pour laquelle je demande est que je veux tout cela en code JSL parce que je lis plusieurs fichiers pour créer une grande table de données et que je dois automatiser le processus afin que l'utilisateur final exécute simplement le script et que sa table sorte sans valeurs manquantes pour le produit. Si c'est plus rapide et plus élégant que ma solution, j'aimerais modifier le code et l'insérer dans mon script.
Merci!,
DS
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Vous disposez d'un script qui fera le travail, mais il existe également une solution interactive. Sélectionnez la colonne qui doit être remplacée afin que toutes les lignes soient sélectionnées. Cliquez avec le bouton droit dans la grille de données de cette colonne et choisissez Remplir > Remplacer les éléments manquants par la valeur précédente.

Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Salut @Thierry_S ,
Votre formule fonctionnerait probablement, mais je ne pourrais pas la faire fonctionner idéalement avec la table particulière que j'ai. Un problème que j'ai trouvé est que parfois j'ai plusieurs lignes l'une après l'autre où le produit change, et le décalage ne fonctionne pas.
J'ai trouvé ce code, qui fonctionne parfaitement. Ce n'est pas très élégant, mais ça marche !
Merci pour votre aide!,
DS
RowReplace = dt << Get Rows Where( :Product != "" );
RowEnd = RowReplace;
Remove From( RowEnd, RowEnd[1] );
Insert Into( RowEnd, N Rows( dt ) );
For( l = 1, l <= N Items( RowReplace ), l++,
For( irow = 2, irow <= RowEnd[l], irow++,
If( Is Missing( :Product[irow] ) == 1,
:Product[irow] = :Product[RowReplace[l]],
)
)
);
Re : Comment remplacer les lignes vides jusqu'à la prochaine entrée (et continuer) ?Salut, voici une formule simple pour réussir l'astuce
If( Is Missing( :Column 1 ),
Lag( :Column 2, 1 ),
:Column 1
)
Meilleur,
TS