Référencer des colonnes à partir d'autres tablesJ'essaie de créer une nouvelle table en lisant à partir de deux tables sources.J'aimerais éviter de les réunir dans une grande table et de manipuler à partir de là.La nouvelle table sera un tableau de deltas entre les deux tables sources.Le script crée très bien les colonnes, mais il ne les remplit pas avec quoi que ce soit.Je suppose qu'il me manque une syntaxe pour référencer les colonnes d'autres tables de ma formule.
predt = Open("C:\...\pre_data.jmp");
predtcols = predt << Get Column Names (string);
postdt = Open("C:\...\post_data.jmp");
postdtcols = postdt << Get Column Names (string);
dt = new table ("delta_values");
for (i=1, i <= NCols(predt), i++,
dt << New column ("delta_"||predtcols[i], numeric, continuous, formula(postdt:column(postdtcols[i]) - predt:column(predtcols[i])));
);Mélange et nettoyage des donnéesRe : Référencer des colonnes à partir d'autres tablesC'est facile à vérifier. Double-cliquez sur l'en-tête de la colonne dans JMP et cela ouvrira la fenêtre Col Info. Le vrai nom de la colonne sera répertorié.Re : Référencer des colonnes à partir d'autres tablesJ'ai importé les noms de colonnes depuis une feuille Excel (sortie de notre testeur), donc je pense qu'ils sont enfouis dans les noms de colonnes
Re : Référencer des colonnes à partir d'autres tablesLes unités (définies comme propriété de colonne) ne font pas partie du nom de la colonne.
Re : Référencer des colonnes à partir d'autres tablesah. il semble que toutes mes colonnes après la colonne 2 aient un (xxx) dans le nom - les unités de mesure.Ça pourrait être ça ?Le journal renvoie une erreur pour chaque colonne comme ça
Re : Référencer des colonnes à partir d'autres tablesJe suppose que c'est un problème de données.Le code a bien fonctionné pour mon scénario de test avec 2 colonnes, mais il est écrit pour gérer autant de colonnes qu'il en trouve dans la variable "predt".
For( i = 1, i <= N Cols( predt ), i++,
Donc, ce que vous devez faire, c'est parcourir le code, vérifier les valeurs des variables et voir ce qui se passe.Sans que vos données soient publiées dans cette discussion, je ne sais pas ce qui se passe.
Y a-t-il des messages affichés dans le journal ?
Re : Référencer des colonnes à partir d'autres tablesMerci pour la réponse rapide!Il semble que je n'obtienne que les deltas des deux premières colonnes avec ce script.Les colonnes sont formatées de la même manière que le reste (numérique, continue), donc je ne suis pas sûr de ce qui se passe ici.
Re : Référencer des colonnes à partir d'autres tablesVous avez eu quelques problèmes qui vous ont frappé (jeu de mots).
- Vous devez << Add Rows() à la table de données vide ;
- Le format d'utilisation de la fonction Column() n'est pas postdt:column( postcols[i] ).Si telle était la méthode à utiliser dans cette situation, le formulaire serait Column( postdt, postcols[i] ).Mais ce n'est pas ce dont nous avons besoin ici
- L'attribution de formules dans les opérations New Column() est un peu délicate.La formule () définie n'est pas évaluée avant de devenir la formule.Autrement dit, si vous placez postcols[i] dans une formule, il ne recherche pas la valeur de postcols[i] pendant la construction de la formule, il place simplement postcols[i] dans la formule, puis tente de l'exécuter. lorsque la formule est exécutée.Le problème, c'est que puisque la variable "i" est réaffectée encore et encore dans une boucle, toutes les formules dans lesquelles "i" est référencé sont modifiées à chaque fois que "i" est modifié dans JSL.Ce n'est pas ce que vous voulez.Donc, ce qu'il faut faire, c'est évaluer dans JSL la chaîne exacte de code que vous souhaitez, puis exécuter ce JSL pour créer la nouvelle colonne.Vous pouvez le voir dans le JSL corrigé ci-dessous
predt = data table("one");//Open( "C:\...\pre_data.jmp" );
predtcols = predt << Get Column Names( string );
postdt = data table("two");//Open( "C:\...\post_data.jmp" );
postdtcols = postdt << Get Column Names( string );
dt = New Table( "delta_values" );
dt << add rows(nrows(postdt));
For( i = 1, i <= N Cols( predt ), i++,
Eval(
Parse(
"dt << New Column( \!"delta_" || predtcols[i] || "\!",
numeric,
continuous,
formula( postdt:" ||
postdtcols[i] || "[Row()] - predt:" || predtcols[i] || "[Row()]) )'"
)
)
);
dt << delete columns("column 1");