Création de nouvelles colonnes et insertion d'une formule à partir des cellules de colonne d'origineBonjour,
Je suis un scripteur JMP inexpérimenté et j'essaie d'écrire mon premier script. J'ai des problèmes avec une partie. Voici ce que j'essaie de faire: Je vais utiliser ce script sur plusieurs tables de données. J'aimerais que le script examine toutes les colonnes, à l'exception de la première colonne (les numéros de colonne et de ligne varient pour chaque table de données) et crée une nouvelle colonne pour chaque colonne déjà présente dans la table. Je voudrais que le nom de chacune des nouvelles colonnes soit identique à celui des colonnes d'origine mais avec un "_code" à la fin et soit placé de préférence à côté de la colonne d'origine du tableau. Dans chaque nouvelle colonne, j'aimerais que la formule soit une déclaration if / then. Si "Colonne A" a le texte "<" dans la cellule, alors 0, sinon 1.
J'espère que mon explication a du sens. J'ai posté mon script bien qu'il semble rompre à la ligne 8 et je ne sais pas pourquoi.
Merci pour toute aide!
Lacey
Names Default To Here( 1 );
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = 2, i <= nitems( col_list ), i++,
data_col = ":" || col_list[i];
code_col = col_list[i] || "_Code";
str = evalinsert (
"\[dt << New Colum ("^code_col^", Numeric, Continuous,
Format("Best",12),
Formula(If( Contains( "^code_col^", "<" ),
0,
1
)));
);]\");
eval(parse(str));
);Re: Créer de nouvelles colonnes et insérer une formule basée sur les cellules de colonne d'origineOui, j'ai ça pour travailler. Merci beaucoup!
Re: Créer de nouvelles colonnes et insérer une formule basée sur les cellules de colonne d'origineLa fonction: Nom () est conçue pour gérer ce problème. Vous trouverez ci-dessous une modification apportée à votre script qui, à mon avis, résoudra le problème. Je n'ai pas testé cette modification, mais je pense que cela fonctionnera. Sinon, vous devriez être capable de voir ce que j'essaye de faire et vous devriez pouvoir le faire fonctionner.
Names Default To Here( 1 );
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = 13, i <= N Items( col_list ), i++,
Eval(
Substitute(
Expr(
Column(col_list[i]) << Data Type( Character );
dt << Add Multiple Columns( __NewColName__, 1, after( __OrigCol__ ), Numeric );
Column( __NewColName__ ) << set formula( If( Contains( __OrigCol__, "<" ), 1, 0 ) );
),
Expr( __NewColName__ ), col_list[i] || "_Code" ,
Expr( __OrigCol__ ), Parse( ":Name(\!"" || col_list[i] || "\!:)" )
)
)
);Re: Créer de nouvelles colonnes et insérer une formule basée sur les cellules de colonne d'origineSalut Jim,
Je suis allé essayer le script sur une nouvelle table de données et j'ai rencontré un problème avec les noms de colonne. Je traite des données environnementales et plusieurs fois, les noms des analytes (c.-à-d. Les noms de colonne) auront des symboles tels que "-", "[", "]", "(", ")" et / ou " , ". Lorsque j'ai exécuté le script, la première colonne intitulée "3-méthyl-1-butène" était erronée. Y at-il un correctif pour cela?
Je vous remercie,
Lacey
Re: Créer de nouvelles colonnes et insérer une formule basée sur les cellules de colonne d'origineCela a très bien fonctionné! Merci!
C'est par erreur que j'ai laissé cette "colonne 13" dans le datatable. C'était juste pour moi de m'assurer que ma déclaration if then then fonctionnait et j'ai oublié de la supprimer lorsque je l'ai mise en ligne. Donc, je viens de supprimer cela de mon datatable, changé le 13 en un 2 dans le script merveilleux que vous avez envoyé et puis cela a fonctionné comme un charme.
Merci beaucoup!
Lacey
Re: Créer de nouvelles colonnes et insérer une formule basée sur les cellules de colonne d'origineVoici une modification de votre code qui, à mon avis, répond à tous vos besoins. Un élément que j'ai eu à traiter est que les colonnes avec lesquelles vous commencez (2-13) doivent être des caractères, pour que la formule ne soit pas erronée. La colonne 13 génère une erreur dans le script, car il s’agit d’une colonne de formule qui ne peut pas être remplacée par un caractère, car dès qu’elle exécute sa formule, la colonne est forcée d’être numérique.
Names Default To Here( 1 );
dt = Current Data Table();
col_list = dt << get column names( string );
For( i = 13, i <= N Items( col_list ), i++,
Eval(
Substitute(
Expr(
Column(col_list[i]) << Data Type( Character );
dt << Add Multiple Columns( __NewColName__, 1, after( __OrigCol__ ), Numeric );
Column( __NewColName__ ) << set formula( If( Contains( __OrigCol__, "<" ), 1, 0 ) );
),
Expr( __NewColName__ ), col_list[i] || "_Code",
Expr( __OrigCol__ ), Parse( ":" || col_list[i] )
)
)
);