Bonjour la communauté,
J'avais posé une question connexe à ce sujet hier et j'ai obtenu d'excellentes réponses. Cependant, j'ai rencontré des problèmes en essayant de mettre en œuvre la solution. Après avoir passé d'innombrables heures, je demande plus d'aide.
Voici le scénario.
J'ai un tableau de données (ci-joint) avec les colonnes et lignes suivantes :

1. Je voudrais parcourir chaque colonne à la fois en commençant par la colonne « fruit », tracer un tracé logistique par « emplacement » et envoyer la sortie à un journal.
2. Je souhaite supprimer complètement les statistiques récapitulatives fournies avec les tracés utilisant JSL.
Je peux faire l'étape 1 sans problème. Ci-dessous mon code :
dt=open("$\fruit_drink.jmp");
colList = dt << Get Column Names();
For( i = 3, i <= Nitems( colList ), i++,
obj = Logistic(
Y( colList[i] ),
X( :Day ),
By( :location),
SendToReport(
Dispatch( {}, "1", ScaleBox, {Min( 35.2151394422311 )} ),
Dispatch(
{},
"FitNom Plot",
FrameBox,
{Marker Size( 4 ), Row Legend(
colList[i],
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Standard" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
obj << journal;
);J'obtiens ce résultat (il y a plus de graphiques avec des statistiques récapitulatives, je ne peux tout simplement pas les placer tous ici) :

J'ai essayé de mettre en œuvre la solution suivante pour supprimer les statistiques (sur la base de l'aide précédente que j'ai reçue de la communauté JMP).
dt=open("$\fruit_drink.jmp");
colList = dt << Get Column Names();
For( i = 3, i <= Nitems( colList ), i++,
obj = Logistic(
Y( colList[i] ),
X( :Day ),
By( :location),
SendToReport(
Dispatch( {}, "1", ScaleBox, {Min( 35.2151394422311 )} ),
Dispatch(
{},
"FitNom Plot",
FrameBox,
{Marker Size( 4 ), Row Legend(
colList[i],
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 1 ),
Marker Theme( "Standard" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
)
)
);
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>Lorsque j'exécute ce script, j'obtiens une boucle infinie et j'ai dû mettre fin à JMP. Lorsque je place les boucles for internes à l'extérieur, rien ne se passe, les statistiques récapitulatives ne sont pas supprimées.
Est-ce que quelqu'un peut m'aider?
Merci.
solution simple.La deuxième boucle For() du script est située dans la première boucle For(), et ils utilisaient tous deux "i" comme variable d'index.Ainsi, la deuxième boucle redéfinissait continuellement la valeur de i à une valeur inférieure à la valeur d'arrêt dans la boucle extérieure (première).
Voici la solution simple
Names Default To Here( 1 );
dt = data table( "fruit_drink" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
Salut Txnelson,
Ci-joint mon tableau de données. C'est étrange que ça marche bien pour toi.
Merci.
Cela ne l’a pas fait lors de mes tests du code que j’ai soumis.Pouvez-vous publier votre tableau de données.Je suppose que le problème est un problème de données, et si j'avais une copie de votre tableau de données, je pourrais chercher plus loin.
Salut Txnelson,
Merci d'avoir pris votre temps pour m'aider. Il semble que votre solution soit proche de ce que je souhaite. Le seul problème est que lors de l'exécution du script, JMP entre dans une boucle infinie. Il continue d'ajouter des graphiques au journal sans cesser de me forcer à tuer la session.
Merci.
Il y a quelques problèmes avec votre code
- Vous devriez vraiment ajouter comme première ligne dans votre code
Names Default To Here( 1 );
cela empêche vos variables dans ce script d'interférer avec les variables du même nom dans un autre script
- Vous essayez d'utiliser des objets et des variables avant leur création ou après leur suppression
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
Le cas ci-dessus est une illustration d'une tentative d'envoi de quelque chose à un journal, avant de créer le journal.obj << close window;
For( i = 1, i <= N Items( obj ), i++,
jrn["Iterations"] << delete;
jrn["Whole Model Test"] << delete;
jrn["Parameter Estimates"] << delete;);
);
Et dans ce cas, vous faites référence à un objet que vous venez de supprimer
- J'ai découvert que dans certains cas, il n'y a pas de table Itérations et que le code génèrerait une erreur. J'ai donc ajouté une fonction Try() autour de certaines instructions.
For( i = 1, i <= N Items( obj ), i++,
Try( jrn["Iterations"] << delete );
Try( jrn["Whole Model Test"] << delete );
Try( jrn["Parameter Estimates"] << delete );
);
Try( obj << close window );
La fonction Try() fait ce qu'elle dit, elle « essaie » simplement d'exécuter l'instruction, mais si elle ne peut pas le faire, elle continue.
- Vous semblez également tenter une deuxième façon d'ajouter votre code au journal.
obj << journal;
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>
Je suppose que ce n'est pas obligatoire et qu'il n'est là qu'en raison du problème de tentative de téléchargement dans la revue avant sa création.
Voici donc une refonte de votre code.
Names Default To Here( 1 );
dt = Open( "$\fruit_drink.jmp" );
colList = dt << Get Column Names();
jrn = New Window( "The Journal", <<JOURNAL></JOURNAL>