Hace unos días, le mostré a una clienta cómo podía usar las tablas de búsqueda en JMP, y pensé que sería una buena idea compartir esto con todos.
Aquellos de ustedes que han usado tablas de búsqueda en otros lugares ya saben lo útiles que pueden ser. Para aquellos que nunca han usado uno, veamos primero un ejemplo simple: asignar una calificación con letras según una calificación numérica.
Supongamos que tenemos la siguiente correspondencia entre los grados numéricos y de letras:
E: x <60
60 <= x <70
C: 70 <= x <80
B: 80 <= x <90
A: 90 <= x
Nos gustaría asignar automáticamente calificaciones de letras a las calificaciones numéricas a continuación, pero ¿cómo?

La forma más común es utilizar una columna de fórmula con una cláusula IF. Las declaraciones se evalúan en el orden encontrado, y una vez que una declaración se evalúa como "Verdadero", la ejecución se detiene, por lo que la cláusula debe construirse teniendo esto en cuenta:


Esta técnica funciona perfectamente bien, pero desafortunadamente, puede volverse engorroso en ciertos casos:
- ¿Qué sucede si tenemos que considerar una lista de muchos valores, no solo unos pocos? Escribir una larga cláusula IF es tedioso y propenso a errores.
- ¿Qué sucede si la lista de valores no se conoce de antemano pero se determina durante el tiempo de ejecución? Podemos manejar esto utilizando JSL para escribir código dinámicamente, pero la mayoría de las personas prefieren evitar esto si pueden.
Afortunadamente, podemos abordar casos como estos con la ayuda de una potente función de matriz: Loc Sorted ().
¿Cómo funciona Loc Sorted ()?
- Loc Sorted ( X , y ) toma como entradas una matriz X , ordenados de bajo a alto, y y , que pueden ser de tipo matriz o escalar.
- Loc Sorted () devuelve el índice (o índices, si y es una matriz) del último valor en X eso es menor o igual que y .
Por ejemplo, ejecutar este código da un resultado de [3], porque 14 es mayor o igual que el número almacenado en el 3 tercera posición de la X matriz, pero menor que el número almacenado en el 4 posición del X matriz:
x = [0, 5,10,15,20,25];
y = 14;
show (loc ordenado (x, y));

De manera similar, ejecutar este código da un resultado de [4,6,6,1]:
x = [0, 5,10,15,20,25];
y = [17, 25, 50, 3];
show (loc ordenado (x, y));

Tenga en cuenta que el mínimo de la X matriz debe ser el valor más bajo de y esperas encontrarte, porque se devuelve 1 por cualquier y valor que es menor que todos los X valores:

En el ejemplo de calificación de letras, podemos usar loc ordenado () para seleccionar la calificación de la lista {“E”, “D”, “C”, “B”, “A”}:

Esto es genial si tenemos solo unas pocas categorías a considerar. Pero, ¿qué sucede cuando tenemos una tabla completa llena de opciones, o no necesitamos simplemente buscar un solo valor, sino buscar varios valores diferentes y usarlos juntos?
Afortunadamente, esto es fácil de hacer. Todo lo que necesitamos es una tabla adicional para mantener la información. Calcular el impuesto a partir de una tabla de impuestos es un ejemplo clásico (y oportuno) de tal caso.
*** Advertencia: No soy un profesional de impuestos. No juego uno en la tele. Por favor obtenga sus tablas de impuestos de 2013 de el IRS .
En el ejemplo de hoy, el cual es solo para fines ilustrativos, no debe interpretarse como asesoría fiscal, y no es de un profesional fiscal , usaremos la siguiente tabla, que hice a partir de la información que encontrado en línea .

Nuestro objetivo es calcular el impuesto adeudado, dada la tabla anterior y la cantidad de ingresos que se gravan.
Primero, debemos colocar esta información en una tabla de datos (observe que reduciremos el contenido de la primera columna en $ 1, debido a la forma en que funciona Loc Sorted ()). Para seguir el ejemplo, use los siguientes nombres para la tabla y columnas, o descargar el ejemplo desde el intercambio de archivos JMP (la descarga requiere inicio de sesión SAS gratuito).
Nombre de la tabla: MarriedFilingJointlyTable
Nombres de columnas:
- Cortes (corte de ingresos para cada uno de los tramos de impuestos)
- PreTax (suma del impuesto adeudado sobre los ingresos en todos los paréntesis inferiores)
- MargRate (tasa de impuesto sobre el último “bloque” de ingresos)

Queremos utilizar la tabla anterior para determinar el impuesto para los ingresos imponibles en la siguiente tabla, denominada MarriedFilingJointlyTable :

Armado con Loc Sorted () y las dos tablas anteriores, estamos listos para comenzar.
En la tabla de ingresos, agregamos una columna seleccionando Cols> Nueva Columna…

Ingresamos "Impuestos" como el Nombre de la columna y seleccionamos "Moneda" como el Formato.
Luego seleccionamos "Fórmula" en el menú desplegable Propiedades de columna, en cuyo punto aparece el Editor de fórmulas.
¿Sabía que podemos ingresar un programa en una fórmula de columna? Eso es lo que haremos aquí, y aunque nuestro script es solo de tres líneas, la forma más fácil y menos propensa a hacer esto es copiar y pegar desde una ventana de script.
Entonces, abre una ventana de script ( Archivo> Nuevo> Nuevo script ) y escriba lo siguiente:

Línea 1 señala la variable dt a la tabla de impuestos:
- Cada vez que deseamos utilizar una columna de la tabla de impuestos, en lugar de la tabla de ingresos, donde realmente residirá la fórmula, debemos comenzar con el nombre de esa columna con dt .
Línea 3 determina qué fila de la tabla de impuestos usaremos para una cantidad determinada de ingresos:
- Llamamos a Loc Sorted () usando todos los valores de la columna de cortes en la tabla de impuestos como X , y el valor en la fila actual de la tabla de Ingresos gravables como y .
- Almacenamos el resultado de esta convocatoria como Soporte , que usaremos para encontrar la fila que necesitamos en la tabla de impuestos.
- Por ejemplo, para el primer valor de ingresos, porque $ 41,196.47 se encuentra entre los valores de corte contenidos en las filas 2 y 3 de la tabla de impuestos, el corchete es igual a 2, por lo que terminaremos usando la fila 2 en la tabla de impuestos para calcular el impuesto.
Línea 5 calcula el impuesto. Usando el primer valor de ingreso de $ 41,196.47 como ejemplo:
- dt: PreTax [Bracket] es el valor almacenado en la fila correspondiente de la columna PreTax de la tabla de impuestos. Para el primer valor de ingreso listado, esta es la suma de todos los impuestos sobre el ingreso por debajo del límite más cercano, pero no superior a, $ 41,196.47. (En este caso, es $ 1,785.)
A esta cantidad, hay que sumarle el producto de:
- dt: MargRate [soporte] , la tasa de impuesto marginal en el tramo más alto en el que se gravan $ 41,196.47 (en este caso, es 0.150), y
- : Ingresos sujetos a impuestos - dt: cortes [corchete] , que es la cantidad de ingresos gravados a esta tasa (en este caso, es de $ 41,196.47 a $ 17,850).
Una vez que ingresamos el script en la ventana del script, lo seleccionamos todo, lo copiamos y lo pegamos en el cuadro rojo en el editor de fórmulas (que hasta ahora no ha contenido nada):

Después de presionar "OK" para cerrar el editor de fórmulas y "OK" para cerrar el editor de propiedades de la columna, encontramos que el impuesto se calculó para cada fila en la tabla de ingresos, y vemos por el icono "+" que el impuesto es la fórmula -basado; la tabla de búsqueda debe estar abierta cada vez que desee volver a evaluar la fórmula. (Si prefiere eliminar la fórmula en este punto, simplemente haga clic en el icono "+", seleccione "Borrar" cuando se abra el editor de fórmulas, luego haga clic en "Aceptar").

Para aquellos de ustedes que prefieren las secuencias de comandos, la solución es similar. En el siguiente script, he escrito valores directamente en la tabla sin una fórmula, pero usar la opción fórmula () en el mensaje << Nueva columna () también funcionaría igual de bien.

Y ahí lo tienes. ¡Eso es todo lo que hay que hacer para utilizar tablas de búsqueda en JMP! Si usted es como muchos de nuestros clientes, verá muchas oportunidades para su uso: disfrute.