Il y a quelques jours, j'ai montré à une cliente comment elle pouvait utiliser les tables de consultation dans JMP et j'ai pensé que ce serait une bonne idée de partager cela avec tout le monde.
Ceux d'entre vous qui ont utilisé des tables de consultation ailleurs savent déjà à quel point ils peuvent être pratiques. Pour ceux qui n'en ont jamais utilisé, examinons d'abord un exemple simple: attribuer une note en lettres basée sur une note numérique.
Supposons que nous ayons la correspondance suivante entre les notes numériques et alphabétiques:
E: x <60
60 <= x <70
C: 70 <= x <80
B: 80 <= x <90
A: 90 <= x
Nous aimerions attribuer automatiquement les notes alphabétiques aux notes numériques ci-dessous - mais comment?

Le moyen le plus courant consiste à utiliser une colonne de formule avec une clause IF. Les instructions sont évaluées dans l'ordre rencontré et, lorsqu'une instruction est évaluée à "True", l'exécution s'arrête - la clause doit donc être construite dans cet esprit:


Cette technique fonctionne parfaitement bien, mais malheureusement, elle peut devenir lourde dans certains cas:
- Que se passe-t-il si nous devons envisager une liste de nombreuses valeurs, pas seulement quelques-unes? L'écriture d'une longue clause IF est fastidieuse et source d'erreurs.
- Que se passe-t-il si la liste de valeurs n'est pas connue à l'avance mais déterminée lors de l'exécution? Nous pouvons gérer cela en utilisant JSL pour écrire du code de manière dynamique, mais la plupart des gens préfèrent éviter cela s'ils le peuvent.
Heureusement, nous pouvons aborder de tels cas à l'aide d'une puissante fonction matricielle: Loc Sorted ().
Comment fonctionne Loc Sorted ()?
- Loc Trié ( X , y ) prend en entrée une matrice X , triés de bas en haut, et y , qui peut être de type matriciel ou scalaire.
- Loc Sorted () renvoie l'index (ou les index, si y est une matrice) de la dernière valeur de X qui est inférieur ou égal à y .
Par exemple, l’exécution de ce code donne un résultat de [3], car 14 est supérieur ou égal au nombre stocké dans le fichier. 3 3 ème position du X matrice, mais inférieure au nombre stocké dans le 4 la position du X matrice:
x = [0, 5,10,15,20,25];
y = 14;
show (loc trié (x, y));

De même, l'exécution de ce code donne un résultat de [4,6,6,1]:
x = [0, 5,10,15,20,25];
y = [17, 25, 50, 3];
show (loc trié (x, y));

Notez que le minimum de la X la matrice devrait être la valeur la plus basse de y vous vous attendez à rencontrer, car 1 est retourné pour tout y valeur qui est inférieure à la totalité de la X valeurs:

Dans l'exemple de lettre, nous pouvons utiliser loc Trier () pour choisir la note de la liste {“E”, “D”, “C”, “B”, “A”}:

C’est génial si nous n’avons que quelques catégories à considérer. Mais que se passe-t-il lorsque nous avons toute une table remplie d'options ou que nous devons non seulement rechercher une valeur unique, mais plusieurs valeurs différentes et les utiliser ensemble?
Heureusement, c'est facile à faire. Tout ce dont nous avons besoin, c'est d'une table supplémentaire pour stocker les informations. Calculer une taxe à partir d'une table de taxes est un exemple classique (et opportun) d'un tel cas.
*** Attention: je ne suis pas un fiscaliste. Je n'en joue pas à la télé. Veuillez obtenir vos tables de taxes 2013 auprès de les leurs .
Dans l'exemple d'aujourd'hui, qui est uniquement à des fins d'illustration, ne doit pas être interprété comme un conseil fiscal et ne provient pas d'un professionnel de la fiscalité , nous utiliserons le tableau ci-dessous, que j’ai constitué à partir des informations que j’ai trouvé en ligne .

Notre objectif est de calculer l’impôt dû en fonction du tableau ci-dessus et du montant de revenu imposé.
Tout d’abord, nous devons placer ces informations dans une table de données (notez que nous allons réduire le contenu de la première colonne de 1 $, en raison du fonctionnement de Loc Sorted ().) Pour suivre cet exemple, utilisez les noms suivants: la table et les colonnes, ou téléchargez l'exemple à partir de l'échange de fichiers JMP (le téléchargement nécessite une connexion SAS gratuite).
Nom de la table: MarriedFilingJointlyTable
Noms de colonne:
- Coupes (seuil de revenu pour chacune des tranches d'imposition)
- PreTax (somme de l'impôt dû sur le revenu dans toutes les tranches inférieures)
- MargRate (taux d'imposition sur le dernier «bloc» de revenu)

Nous voulons utiliser le tableau ci-dessus pour déterminer l’impôt sur le revenu imposable dans le tableau suivant, nommé MarriedFilingJointlyTable :

Armé de Loc Sorted () et des deux tableaux ci-dessus, nous sommes prêts à commencer.
Dans le tableau des revenus, nous ajoutons une colonne en sélectionnant Cols> Nouvelle colonne…

Nous entrons «Taxe» comme nom de colonne et sélectionnons «Devise» comme format.
Nous sélectionnons ensuite «Formule» dans la liste déroulante Propriétés de la colonne, à quel moment l’éditeur de formule apparaît.
Saviez-vous que nous pouvons réellement inscrire un programme dans une formule de colonne? C’est ce que nous allons faire ici - et même si notre script n’est que de trois lignes, la façon la plus simple et la moins sujette aux erreurs de le faire est de copier-coller depuis une fenêtre de script.
Alors ouvrez une fenêtre de script ( Fichier> Nouveau> Nouveau script ) et tapez ce qui suit:

Ligne 1 pointe la variable dt à la table des taxes:
- Chaque fois que nous voulons utiliser une colonne de la table des taxes - plutôt que la table des revenus, où la formule résidera réellement - nous devons précéder ce nom de colonne par dt .
Ligne 3 détermine quelle ligne de la table des impôts nous allons utiliser pour un montant de revenu donné:
- Nous appelons Loc Sorted () en utilisant toutes les valeurs de la colonne des coupes dans la table des taxes comme suit: X et la valeur de la ligne en cours du tableau Revenu imposable en tant que y .
- Nous stockons le résultat de cet appel sous Support , que nous utiliserons pour trouver la ligne dont nous avons besoin dans la table des taxes.
- Par exemple, pour la première valeur de revenu, étant donné que 41 196,47 USD se situent entre les seuils contenus dans les lignes 2 et 3 de la table des taxes, Bracket est égal à 2, nous allons donc utiliser la ligne 2 de la table des taxes pour calculer la taxe.
Ligne 5 calcule la taxe. En prenant la première valeur de revenu de 41 196,47 $ comme exemple:
- dt: PreTax [Bracket] est la valeur stockée dans la ligne appropriée de la colonne PreTax de la table de taxe. Pour la première valeur de revenu indiquée, il s'agit de la somme de tous les impôts sur les revenus inférieurs au seuil se rapprochant le plus proche de 41 196,47 $, sans toutefois dépasser celui-ci. (Dans ce cas, il est de 1 785 $.)
A ce montant, il faut ajouter le produit de:
- dt: MargRate [Bracket] , le taux marginal d'imposition dans la tranche la plus élevée auquel 41 196,47 $ est taxé (dans ce cas, il est de 0,150), et
- : Revenu imposable - dt: coupes [parenthèse] , qui correspond au montant du revenu imposé à ce taux (dans ce cas, il s’établit entre 41 196,47 $ et 17 850 $).
Une fois que le script est entré dans la fenêtre de script, nous le sélectionnons tous, le copions et le collons dans la zone rouge de l'éditeur de formule (qui jusqu'à présent ne contenait rien):

Après avoir cliqué sur «OK» pour fermer l'éditeur de formule et sur «OK» pour fermer l'éditeur de propriétés de colonne, nous avons constaté que la taxe avait été calculée pour chaque ligne du tableau des revenus et nous avons constaté par l'icône «+» que la taxe est la formule. -basé; la table de recherche doit être ouverte chaque fois que vous souhaitez réévaluer la formule. (Si vous préférez supprimer la formule à ce stade, cliquez simplement sur l'icône «+», sélectionnez «Effacer» lorsque l'éditeur de formule s'ouvre, puis cliquez sur «OK».)

Pour ceux d'entre vous qui préfèrent les scripts, la solution est similaire. Dans le script ci-dessous, j'ai écrit des valeurs directement dans la table sans formule, mais l'utilisation de l'option formula () dans le message << New Column () New fonctionne également.

Et voila. C'est tout ce qu'il y a à utiliser les tables de recherche dans JMP! Si vous êtes comme beaucoup de nos clients, vous verrez de nombreuses possibilités d'utilisation: profitez-en.