Je ne parviens pas à faire fonctionner les statistiques de colonne dans une boucle?J'essaie d'écrire un script qui supprime les valeurs éloignées de plusieurs colonnes d'une table en utilisant une boucle pour examiner chaque nom de colonne et le transmet à une fonction comportant la ligne de code suivante pour calculer le 99e centile.
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
J'utilise ensuite une boucle For Each Row pour comparer les valeurs au centile calculé et supprimer toutes les lignes non comprises dans cette valeur.
Le code fonctionne bien si je ne fais qu'une colonne. Toutefois, si je configure la boucle avec plusieurs colonnes lisant les noms de colonne dans la variable Test_Number, jmp utilise toujours la valeur du quantile calculée en premier pour la première colonne, elle ne recalcule pas pour chaque colonne. . La boucle semble être correctement configurée, car elle affiche la variable Test_Number dans le journal et cela change pour correspondre à la colonne comme prévu. Donc, si je fais 10 colonnes, les 10 noms de colonne corrects sont affichés mais seul le quantile de la première colonne est répété 10 fois !!!
De plus, lorsque le script se termine si je mets en surbrillance la ligne de code ci-dessous, il calcule la valeur de la dernière colonne rencontrée correctement.
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
J'ai essayé d'effacer le test_upper_quantile global qui contient la valeur de quantile au début de la fonction, mais cela ne fait aucune différence?
Des idées? J'ai remarqué que lorsque vous passez le curseur de la souris sur la colonne quantile, elle indique qu'elle est mise en cache. Si c'est le cas, y a-t-il un moyen d'effacer le cache?
La fonction complète est affichée
remove_outliers = Fonction ({Test_Number},
show (numéro_test);
test_lower_quantile = Col Quantile (Column (Test_Number), 0.01);
test_upper_quantile = Col Quantile (Column (Test_Number), 0.99);
show (test_upper_quantile);
lower_cutoff = test_lower_quantile;
upper_cutoff = test_upper_quantile;
Pour chaque rangée (
Si (Column (numéro_test)) [] Exclus (État de la ligne ()) = 1
)
Si (Column (numéro_test)) []> upper_cutoff,
Exclus (État de la ligne ()) = 1
)
)
)
Le message a été édité par: apedenRe: J'ai du mal à faire fonctionner les statistiques de colonne dans une boucle?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Essayez la fonction As Column () pour convertir ce que vous obtenez dans la liste déroulante Col () << sélectionnez-le en une référence de colonne.
Noms par défaut jusqu'ici ( 1 ) ;
dt = Ouvrir ( "$ SAMPLE_DATA / solubility.jmp" ) ;
maintenant = Nouvelle fenetre ( "Sélectionner les colonnes pour les quantiles" ,
kg = Col List Box ( tout ) ,
Boîte à boutons ( "D'accord" ,
cols = kg << être sélectionné ;
maintenant << Fermer la fenêtre ;
)
) ;
Pour ( je = 1 , je <= N articles ( cols ) , je ++,
Spectacle ( Col Quantile ( Comme colonne ( cols [ je ] ) , .5 ) )
) ;
-Jeff
Re: J'ai du mal à faire fonctionner les statistiques de colonne dans une boucle?Salut Jeff
Votre code fonctionne pour moi aussi. Il est très similaire à mon code, la seule différence que je peux voir est la façon dont la liste de noms de colonnes est générée. À partir d'une fenêtre de boîte de dialogue, j'utilise:
| | | | ButtonBox ("Ok", |
| | | | | yParamNames = colListY << get Items; |
qui renvoie une liste de chaînes, chaque nom de colonne entre guillemets. colListY est une zone de liste de colonnes renseignée par l'utilisateur.
J'ai trouvé une solution géniale. Il saisit tout dans la colonne au lieu de laisser JMP faire le travail. L’inconvénient de la solution de contournement que je vois est qu’il n’ignore pas les données masquées et exclues, sauf si je le programme manuellement.
tempList1 = {} ; tempList1 = colonne ( dtData , yParamList [ je ]) << obtenir comme matrice ; medVal [ je ] = quantile ( 0.5 , tempList1 ) ; q1Val [ je ] = quantile ( 0,25 , tempList1 ) ; q3Val [ je ] = quantile ( 0,75 , tempList1 ) ; // medVal = col quantile (column (dtData, yParamList) ), 0,5); // q1Val = col quantile (column (dtData, yParamList) ), 0,25); // q3Val = col quantile (column (dtData, yParamList) ), 0,75); | |
Re: J'ai du mal à faire fonctionner les statistiques de colonne dans une boucle?Peut-être pourriez-vous poster du code qui vous cause des difficultés.
Cela fonctionne pour moi:
dt = ouvrir ( "$ SAMPLE_DATA / Solubility.jmp" ) ;
Caroline du Nord = dt << obtenir des noms de colonnes ( Numérique ) ;
pour ( je = 1 , je <= nitems ( Caroline du Nord ) , je ++,
spectacle ( col quantile ( colonne ( Caroline du Nord [ je ]) , .5 )) ;
) ;
/ *:
Col Quantile (Column (nc ), 0,5) = 1,36;
Col Quantile (Column (nc ), 0,5) = 1,21;
Col Quantile (Column (nc ), 0,5) = 0,95;
Col Quantile (Column (nc ), 0,5) = 0,445;
Col Quantile (Column (nc ), 0,5) = -0,015;
Col Quantile (Column (nc ), 0,5) = -0,62;
Re: J'ai du mal à faire fonctionner les statistiques de colonne dans une boucle?Je sais que ce post a plusieurs années, mais existe-t-il une solution à ce problème? Je vois exactement la même chose. Si vous utilisez col quantile dans une boucle, seule la première itération de la boucle sera stockée dans ma liste.
Existe-t-il un moyen de contourner le problème pour obtenir des données quantiles sans la fonction col quantile ()? Je ne veux pas vraiment faire de tableaux récapitulatifs (récapitulatif avec des données quantiles) car cela augmenterait le temps d'exécution de plusieurs milliers de colonnes.
Merci