Comment définir une formule sur plusieurs colonnes de manière élégante<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut les gars,
Quelqu'un peut-il m'aider avec la question ci-dessous?
Je voudrais éviter les longues formules comme ci-dessous : (chaque élément est un nom de colonne !)
Colonne("Std")<
Formule(
Dév standard(
:F23 m A,:F23 m C,:F23 m H,:F23 MA,:F23 MC,:F23 MH,:F23 NA,:F23 NC,:F23 NH,
:F30 m A,:F30 m C,:F30 m H,:F30 MA,:F30 MC,:F30 MH,:F30 NA,:F30 NC,:F30 NH,
:F36 m A,:F36 m C,:F36 m H,:F36 MA,:F36 MC,:F36 MH,:F36 NA,:F36 NC,:F36 NH,
:F37 m A,:F37 m C,:F37 m H,:F37 MA,:F37 MC,:F37 MH,:F37 NA,:F37 NC, :F37 NH,
:F49 m A,:F49 m C,:F49 m H,:F49 MA,:F49 MC,:F49 MH,:F49 NA,:F49 NC, :F49 NH,
:F53 m A,:F53 m C,:F53 m H,:F53 MA,:F53 MC,:F53 MH,:F53 NA,:F53 NC, :F53 NH,
:F87 m A,:F87 m C,:F87 m H,:F87 MA,:F87 MC,:F87 MH,:F87 NA,:F87 NC, :F87 NH ) ) );
Acclamations,
Dan
Re : Comment définir une formule sur plusieurs colonnes de manière éléganteLes deux solutions ci-dessus fonctionneront, mais sachez que pour la solution de Ron, la formule ne peut fonctionner que jusqu'à ce que la variable globale noms de colonne est redéfini ou effacé, par exemple lorsque la session JMP est fermée.
Voici un code comparant les deux approches :
dt = Ouvert ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
noms de colonne = dt << obtenir les noms de colonnes ;
// Approche de Ron : Variables dans la formule non évaluées
dt << Nouvelle colonne ( "Std" , Formule ( Dév Std ( noms de colonne [ 4 :: 5 ]))) ;
// Approche de Ian : Variables évaluées avant de définir la formule
formule = Expr éval ( Dév Std ( Expr ( noms de colonne [ 4 :: 5 ]))) ;
dt << Nouvelle colonne ( "Std2" , Formule ( Nom Expr ( Formule ))) ;
// Comparer les formules dans le journal
Imprimer ( : Std << obtenir la formule , Std2 << obtenir la formule ) ;
//Effacer les définitions de variables et ajouter des lignes. Seul Std2 reconnaîtra les modifications
Effacer les variables globales () ;
Tableau de données actuel () << enchaîner (
Ouvert ( "$SAMPLE_DATA/Etudiants2.jmp" ) ,
ajouter au premier tableau
) ;
Re : Comment définir une formule sur plusieurs colonnes de manière élégantesalut excellent77 ,
Ian@JMP La solution de est correcte. Cependant, si vous recherchez quelque chose de moins rigoureux, vous pouvez essayer ce qui suit.
en supposant que les colonnes dont vous avez besoin pour la formule sont toutes ensemble dans une plage, vous pouvez introduire le nombre de la première et de la dernière comme suit :
dt = Ouvert ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
noms de colonne = dt << obtenir les noms de colonnes ;
col = dt << nouvelle colonne ( "Std" ) ;
col << Définir la formule ( développement standard ( noms de colonne [ 4 :: 5 ] )) ;
meilleur,
Ron
Re : Comment définir une formule sur plusieurs colonnes de manière éléganteCe code "évite" dans le sens où il utilise les colonnes actuellement sélectionnées afin que vous n'ayez pas à taper. C'est ce que vous recherchez, s'il vous plaît ?
Faites 'File > New > New Script', coupez et collez le JSL, puis faites 'Edit > Run Script'.
NomsDefaultToHere ( 1 ) ;
// Créer un tableau
NC = 30 ;
dt = NouveauTable ( "Test" ) ;
pour ( c = 1 , c <= NC , c ++,
dt << NouvelleColonne ( "Col" || Carboniser ( c ) , Numérique , Continu , Formule ( AléatoireNormal ())) ;
) ;
dt << Ajouter des lignes ( 100 ) ;
// Sélectionne la moitié des colonnes
n = Tour ( NC / 2 ) ;
c = IndexAléatoire ( sous-col ( dt ) , n ) ;
pour ( je = 1 , je <= n , je ++,
Colonne ( dt , c [ je ]) << setSelected ( 1 ) ;
) ;
// Exécutez ce code pour créer une nouvelle colonne de formule pour l'écart type des colonnes actuellement sélectionnées dans une table
selCols = dt << getSelectedColumns ;
addCol = Expr ( dt << NouvelleColonne ( "StdDev" , Numérique , Continu , Formule ( DévStd ( colsTBD )))) ;
RemplacerDans ( addCol , Expr ( colsTBD ) , Éval ( selCols )) ;
addCol ;