Comment puis-je créer une table de sous-ensembles conditionnels sans appeler directement un nom de colonne ?Les 3 premières lignes de ce script créent une nouvelle table de données dont les hauteurs sont inférieures à 60. Cette partie fonctionne bien.
Pour la fonction que j'aimerais développer, j'aimerais référencer une colonne d'une manière différente de celle d'utiliser :height.
J'ai essayé 4 façons différentes de référencer la colonne, mais aucune ne fonctionne. J'ai utilisé la fonction de colonne et j'ai obtenu la fonction de référence de colonne (voir ci-dessous).
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//This one works
dtSubgroup = dt << Subset(Rows(dt << get rows where(:height < 60)));
//None of these work
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(dt, "height") < 60)));
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column(4) < 60)));
refList = dt << Get Column Reference( {"height"} );
dtSubgroup = dt << Subset(Rows(dt << get rows where(refList[1] < 60)));Y a-t-il une raison pour laquelle ils ne fonctionnent pas ?
Une suggestion sur une solution ?
Merci pour votre aide.
Re : Comment puis-je créer une table de sous-ensemble conditionnelle sans appeler directement un nom de colonne ?Cela semble étrange, n'est-ce pas ?
Tout est question de contexte. Par exemple, vous pouvez utiliser ceci dans une formule de colonne :
If( Column("height") < 60, 0, 1 ); // implicit assignment of Row() = current row number
Ou vous pouvez l'utiliser dans la fonction For Each Row() pour accomplir la même chose dans un script :
For Each Row(
// implicit assignment of Row() = current row number
If( Column("height" ) < 60,
:status = "small",
:status = "large"
)
)
Le contexte de la formule de colonne et de l'itération ci-dessus est tel que JMP définit implicitement la fonction Row() pour vous. JMP utilise donc ces informations pour déterminer où obtenir ou stocker la valeur (c'est-à-dire quelle ligne). Ce n’est pas le contexte du cas général ici :
dtSubgroup = dt << Subset(Rows(dt << get rows where(Column("height") < 60)));
La table de données n'utilise pas implicitement le numéro de ligne actuel lorsque vous tentez d'évaluer la comparaison. Vous le forcez en ajoutant l'opérateur d'indice vide, [ ].
Re : Comment puis-je créer une table de sous-ensemble conditionnelle sans appeler directement un nom de colonne ?Merci, cela a fait exactement ce que je voulais.
Puis-je demander pourquoi cela fonctionne ?
J'ai utilisé la fonction colonne plusieurs fois sans utiliser de crochets.
Qu’est-ce qui est différent dans cette affaire ? Quelle est la règle à suivre ?Re : Comment puis-je créer une table de sous-ensemble conditionnelle sans appeler directement un nom de colonne ?Essayez d'ajouter des crochets vides après la parenthèse fermante de la fonction Column(). Comme ça:
Column("height")[] < 60
Ce changement est-il utile ?