Salut à tous,
J'ai du mal à comprendre pourquoi le code suivant échoue:
// This code doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( selectedCol[1] ) < Col Mean( selectedCol[2] ),
begin = selectedCol[1];
end = selectedCol[2];
,
begin = selectedCol[2];
end = selectedCol[1];
);
Je veux que toute la colonne soit réaffectée aux variables début / fin, mais cela ne se produit pas. J'ai essayé ceci:
// This code still doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( As Column( selectedCol[1] ) ) < Col Mean( As Column( selectedCol[2] ) ),
begin = As Column( selectedCol[1] );
end = As Column( selectedCol[2] );
,
begin = As Column( selectedCol[2] );
end = As Column( selectedCol[1] );
);
Puis-je obtenir de l'aide, conceptuelle et pratique à la fois. Cela semble très simple, mais il me manque évidemment quelque chose d'important.
John
Merci, merci Julian!
C'est incroyablement utile !!!!
John
salut @john_madden ,
Deux choses que je remarque ici. Tout d'abord, JSL évalue les fonctions imbriquées de l'extérieur dans, ce qui signifie que vous avez besoin d'un Eval () pour la référence à la colonne qui fait partie de votre liste. Deuxièmement, si je vous ai bien compris, vous voulez que toutes les valeurs de colonne affectées commencent et finissent. Si tel est le cas, vous devez envoyer un message à la colonne pour renvoyer les valeurs suivantes: << Obtenir les valeurs. Ce qui suit devrait fonctionner (en supposant que ce soit votre intention!).
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( eval(selectedCol[1]) ) < Col Mean( eval(selectedCol[2]) ),
begin = selectedCol[1] << Get Values;
end = selectedCol[2] << Get Values;
,
begin = selectedCol[2] << Get Values;
end = selectedCol[1] << Get Values;
);
J'espère que ça aide!
@julien
Edit: Je peux voir comment quelqu'un pourrait interpréter mon point à propos des fonctions imbriquées et dire "Attendez, Col Mean (selectedCol [1])" n'est pas une fonction imbriquée, alors pourquoi cela ne fonctionne-t-il pas? En fait, s’abonner est une fonction, cela se fait simplement avec des crochets. Vous auriez pu écrire:
Col Mean( Subscript(selectedCol,1) )
et dans ce cas, l'imbrication de la fonction est évidente. Lorsque JMP essaie d’évaluer ce bit de code, c’est que Col Mean () est évalué en premier et que cette fonction nécessite une colonne pour fonctionner. Il frappe une fonction Subscript () et ne sait pas quoi en faire. Donc, en encapsulant Subscript () dans Eval (), nous demandons à JMP de traiter d’abord l’indice (qui renvoie une référence à une colonne) avant d’essayer d’évaluer Col Mean ().
Col Mean( Eval( Subscript( selectedCol,1 ) ) )
J'espère que l'explication supplémentaire aide!