Concaténer et supprimer des formulesGens,
J'ai plusieurs tables (échantillons) qui ont de nombreuses formules de colonnes actives. Mon script à un moment donné concatène toutes les tables. Cependant, je souhaite que les formules soient supprimées car je souhaite conserver les données de table individuelles (échantillon) intactes afin de comparer / superposer toutes les données qui ont été concaténées. Malheureusement, je n'arrive pas à désactiver correctement les formules lorsqu'elles sont concaténées, et les colonnes nouvellement concaténées sont évaluées, ce qui perd les données d'échantillon individuelles. Je pensais avoir ce battement avec le code joint, mais lorsque j'ai recopié la table initiale dans un autre dossier, les formules "se sont réactivées" provoquant une certaine frustration. S'il existe un bon correctif, je suis ouvert à toute contribution, car l'évaluation de la formule de suppression ne fonctionne pas dans l'implémentation actuelle.
Daniel
Con = Expr(
n = N Table();
dt = {};
// Sort list ascending (sample replicates)
For( i = 1, i <= n, i++,
table = data table(i);
insert into(dt, table);
sort list into(dt)
);
// Concatenate each file (sample replicates)
dt_all = Data Table( dt[1] );
For(i = 1, i <= n, i++,
If(i > 1,
Suppress Formula Eval(suppress=1);
dt_all << Concatenate(Invisible, dt[i], Append to first table);
)
);
Current Data Table(dt_all);
);
Tableau de donnéesScriptRe: Concaténer et supprimer des formulesCe que vous devez faire, c'est supprimer les formules avant la concaténation.Cela convertira les valeurs en valeurs statiques et vous n'aurez plus de problème.
:yourColumn << delete formula;
Re: Concaténer et supprimer des formulesJim,
Merci pour la réponse. Puisqu'il y a environ 10 colonnes avec des formules par table, y a-t-il une approche « globale » pour tout supprimer en même temps ?
Daniel
Re : Concaténer et supprimer des formulesVous pouvez placer les noms de colonne dans une liste, puis parcourir la liste en boucle, en supprimant chacun d'eux.
Re : Concaténer et supprimer des formulesJMP est également capable de le faire de manière interactive avec Standardize Attributes :
Sélectionnez toutes les colonnes, faites un clic droit sur l'une des colonnes et sélectionnez Standardiser les attributs :

Ajoutez une formule pour supprimer les propriétés et appuyez sur OK (ou appliquez):

Si vous avez JMP16, cela sera imprimé dans le journal amélioré :
// Open Data Table: Wheat.jmp
// → Data Table("Wheat")
Open("$SAMPLE_DATA/Wheat.jmp");
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("Wheat"));
For Each({col, index},
{:Variety, :Yield, :Moisture, :Pred Formula Yield, :Cond Pred Formula Yield},
col << Delete Formula
);
Current Data Table(old dt);
);
Et cela vous donnera une bonne idée de la façon de gérer cela (comme l'a dit txnelson, faites une boucle sur la liste et supprimez les formules au fur et à mesure). Vous pouvez également obtenir toutes les colonnes du tableau avec << Get Column Names. Vous ne pourrez pas supprimer les formules des colonnes qui n'en ont pas (et le script fourni par le journal amélioré ne fonctionnera pas directement comme ça), mais vous pouvez contourner cela en enveloppant le col << Supprimer la formule avec Try(). Après avoir nettoyé le script de journal amélioré, vous pourriez vous retrouver avec quelque chose comme ceci :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Wheat.jmp");
For Each({col}, dt << get column names(String),
Try(Column(dt, col) << Delete Formula)
);Re : Concaténer et supprimer des formulesDésolé pour la réponse tardive. J'apprécie tous les retours.
Sans encore attaquer toutes les colonnes, j'ai juste essayé d'éliminer une formule dans une colonne particulière. Lorsque j'applique la ligne "supprimer la formule" en dehors de la boucle, j'obtiens le résultat souhaité, c'est-à-dire qu'aucune formule n'existe. Cependant, si la même ligne va dans la boucle, après l'ouverture du fichier, j'obtiens l'erreur suivante :
"Column Pore Diameter (um) has no formula in access or evaluation of 'delete formula' , delete formula/*###*/"
De toute évidence, je n'ai pas encore compris la mécanique pour voir pourquoi il y a un problème. Seriez-vous en mesure de donner un aperçu?
Merci beaucoup.
For( i=1, i <= N Items(b), i++,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, Append to first table);
);
);
//file_1:"Pore Diameter (um)" << delete formula;
file_1 << Save(SD1 || "All Summary");
Close("All Summary");Re : Concaténer et supprimer des formulesÊtes-vous sûr d'essayer d'accéder à la table de données correcte ? Vous ouvrez toujours le même fichier que file_1 dans la boucle for.
Vous pouvez ajouter des impressions de débogage à l'intérieur de la boucle for pour vous aider à découvrir quel est le problème, par exemple :
file_1 = Open(SD1 || b[1]);
show(file_1);
show(file_1 << Get Column Names("String")); //depending how many columns you have might not want to do this
show(Contains(file_1 << Get Column Names("String"), "Pore Diameter (um)"));
file_1:"Pore Diameter (um)" << delete formula;N'oubliez pas non plus de fermer les tables de données dont vous n'avez plus besoin avec Close(dtref, no save);
Re : Concaténer et supprimer des formulesJarmo,
Merci beaucoup d'avoir éclairé le problème. Je ne savais pas qu'il y aurait un problème sans une formule existante. Avec ce fait à l'esprit, j'ai créé une instruction conditionnelle pour la première table. Cela a évidemment fonctionné puisque "file_1" a la formule de colonne spécifique supprimée une fois. Le code ci-joint a fonctionné pour l'exemple de colonne unique.
Maintenant qu'il est compris qu'une formule doit être présente, le problème est que toutes les colonnes n'ont pas de formules. Donc, si je récupère tous les noms de colonnes, il y aura un sous-ensemble qui n'a pas de colonnes associées. Existe-t-il un moyen de tester si une colonne contient une formule afin qu'une liste appropriée puisse être construite en boucle? Ou est-ce que je "force brutalement" le problème en configurant une liste dans JSL que je devrai mettre à jour chaque fois que j'ajouterai une formule à une colonne?
Neil
For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");