Re: Creación de una fórmula JMP para extraer valores de una tabla de búsqueda con cuatro variables categóricasHay un par de problemas.No sé con qué versión de JMP está ejecutando.Desarrollé la fórmula en JMP 16, que aparentemente tiene un error.Por lo tanto, se cambió la fórmula cuando la guardé en JMP 16, de lo que había probado.Informaré el error después de que termine de responderte.La fórmula correcta a utilizar es:
If( Row() == 1,
dt = Data Table( "WEWA suitability matrix with data" );
dtLookup = Data Table( "WEWA suitability matrix" );
Show( dt, dtlookup );
);
curSpec = Uppercase( dt:Species );
curLandForm = Uppercase( dt:Landform );
curLandCover = Uppercase( dt:Landcover );
curTimber = Uppercase( dt:Timber Class );
x = .;
Try(
x = dtLookup:Suitability[dtLookup << get rows where(
Uppercase( dtLookup:Species ) == curSpec & Uppercase( dtLookup:Landform ) == curLandForm & Uppercase( dtLookup:Landcover ) ==
curLandCover & Uppercase( dtLookup:Timber Class ) == curTimber
)][1],
.
);
x;
También edité esta fórmula en mi última respuesta, por lo que nadie debería tener problemas con ella.
En los últimos datos que proporcionó, hay una discrepancia con la tabla de datos de búsqueda.Ha cambiado algunas de las letras minúsculas a mayúsculas.La fórmula original que escribí no compensa esto.En la versión actual, obligué a que todas las búsquedas se hicieran con mayúsculas, por lo que ya no debería ser un problema.
Re: Creación de una fórmula JMP para extraer valores de una tabla de búsqueda con cuatro variables categóricasEy @txnelson
Ambas soluciones tienen sentido para mí. Preferiría la solución impulsada por fórmula. Continué y copié la fórmula de su columna "fórmula derivada..." en la tabla de especies observadas que creó en una segunda tabla JMP donde estoy calculando los índices de idoneidad del hábitat (adjuntos). Cuando trato de aplicar la fórmula me sale el siguiente error:

No estoy seguro de cómo arreglaría esto. ¿Le importaría echar un vistazo a la "columna de idoneidad derivada de la fórmula" en la tabla de datos JMP adjunta y decirme dónde podría haber cometido un error? De nuevo, gracias por tu ayuda. Casey
Re: Creación de una fórmula JMP para extraer valores de una tabla de búsqueda con cuatro variables categóricasTal vez también podría intentar usar Virtual Join.
Cree una columna de enlace (por ejemplo, concatene los cuatro valores de agrupación) a las dos tablas que tiene:


Y luego realice la unión virtual:
Tabla con idoneidad como Link ID:

Tabla a la que desea extraer cosas:

Si no recuerdo mal, las uniones virtuales requerían que tuviera al menos la tabla de datos que se guardará como ID de enlace.
Aspectos básicos para comprender Virtual Join en JMP
Uniones virtuales de JMP On Air
Re: Creación de una fórmula JMP para extraer valores de una tabla de búsqueda con cuatro variables categóricasEDITAR: OOPS, me perdí la parte de que querías esto en una tabla como una propiedad de columna. Pensé que solo querías devolver un valor basado en que alguien seleccionara los 4 valores en un cuadro de diálogo o algo así. Por lo tanto, deberías ir con algo como lo que propone Jim.
Salud,
Brady
//////////////////
Hola,
Hay muchas maneras de hacer esto... probablemente la forma más "de libro de texto" implica una matriz asociativa con claves multidimensionales, pero para su caso de uso es mucho más sencillo hacer algo como lo siguiente:
Names Default To Here( 1 );
//suppose these are the values you want to look up, and you've gotten them somehow
spec = "Worm-eating warbler";
form = "Terrace-mesic";
cover = "Mixed";
class = "sapling";
//set a variable reference to the lookup table
dt1 = Data Table( "WEWA suitability matrix.jmp" );
//add a formula column to the lookup table, concatenating these 4 values, separated by a comma for clarity
dt1 << New Column( "Concat", character, formula( Concat Items( {:species, :landform, :landcover, :timber class}, "," ) ) );
//create a matrix of the suitabilities and a list of the combo values
suits = dt1:suitability << get values;
combos = dt1:concat << get values;
//create a lookup value from your 4 values by concatenating them in the same way you did in the formula
myLookup = concatitems({spec, form, cover, class}, ",");
//grab the suitability value you want; it will have the same position in its matrix as the lookup value has in its list
s = suits[contains(combos, myLookup)];
show (s);
Salud,
Brady
Re: Creación de una fórmula JMP para extraer valores de una tabla de búsqueda con cuatro variables categóricasAquí hay dos formas de manejar su búsqueda.La primera es una fórmula que creé y apliqué a una tabla de muestra con solo 3 entradas.Busca en la tabla de datos de la matriz de idoneidad de WEWA y extrae el valor de idoneidad.Es una buena fórmula, pero no muy eficiente.

Esta es la fórmula utilizada para la columna "Fórmula de idoneidad derivada"
If( Row() == 1,
dt = Data Table( "WEWA suitability matrix with data" );
dtLookup = Data Table( "WEWA suitability matrix" );
Show( dt, dtlookup );
);
curSpec = Uppercase( dt:Species );
curLandForm = Uppercase( dt:Landform );
curLandCover = Uppercase( dt:Landcover );
curTimber = Uppercase( dt:Timber Class );
x = .;
Try(
x = dtLookup:Suitability[dtLookup << get rows where(
Uppercase( dtLookup:Species ) == curSpec & Uppercase( dtLookup:Landform ) == curLandForm & Uppercase( dtLookup:Landcover ) ==
curLandCover & Uppercase( dtLookup:Timber Class ) == curTimber
)][1],
.
);
x;
El segundo método, que crea la columna llamada "adecuación", se crea utilizando la plataforma de actualización en JMP.Aquí está el guión para su creación.
names default to here(1);
Data Table( "Observed Species" ) << Update(
With( Data Table( "WEWA suitability matrix" ) ),
Match Columns(
:Species = :Species, :Landform = :Landform, :Landcover = :Landcover,
:Timber Class = :Timber Class
)
);
PDLa tabla de datos llamada Especies observadas comienza con solo Sepcies, Landform, Landcover y Timber Class como columnas.
Crear una fórmula JMP para extraer valores de una tabla de búsqueda con cuatro variables categóricasHola a todos,
Estoy desarrollando índices de idoneidad del hábitat para 75 especies de aves diferentes. Tengo tablas con la misma estructura que la que se describe aquí (y adjuntas como tabla de datos JMP) para cada especie de ave. Los apilaré por especies para que todas las especies queden incluidas en la misma tabla. La tabla adjunta es jerárquica. El primer nivel de la jerarquía son las especies (actualmente solo hay una, pero eventualmente los datos de las 75 especies estarán en la misma tabla). El siguiente nivel de la jerarquía es la forma del relieve (p. ej., valle, terraza o cresta). Una vez que se ha determinado la forma del relieve, el siguiente nivel de la jerarquía es el tipo de cobertura del suelo (por ejemplo, bosque caducifolio, de coníferas y mixto). Una vez que se ha determinado la combinación de forma terrestre/cobertura terrestre, el siguiente nivel es la clase de madera (por ejemplo, arbustos-plántulas, árboles jóvenes, madera para sierra de pértiga, madera para sierra grande). Cada combinación de 4 factores de especie, forma terrestre, cobertura terrestre y clase de madera tiene un valor de idoneidad de hábitat entre 0 y 1. Por ejemplo, las reinitas devoradoras de gusanos, a quienes les gustan los bosques caducifolios más antiguos, tienen un alto valor de idoneidad de hábitat (0,8) para la combinación de valle/caducifolio/madera de sierra grande. Esta misma especie tiene un valor de idoneidad de hábitat más bajo (0,2) para la combinación cresta/bosque mixto/retoño. Si observa la tabla adjunta, esto tendrá sentido para usted.
Me gustaría poder crear una fórmula que pueda usar como propiedad de columna que haga referencia a esta tabla de búsqueda para encontrar valores de idoneidad del hábitat basados en la combinación de especie/forma del terreno/cobertura del suelo/clase de madera para cualquier sitio determinado (de los cuales tengo miles). Lo primero que pensé fue hacer esto con una declaración elaborada si, entonces, pero hay 60 combinaciones de forma terrestre/cobertura terrestre/edad del bosque para cada especie y 75 especies. No sé cómo hacer esto de otra manera que no sea manualmente en el editor de fórmulas y esto parece una locura. ¿Existe una manera simple y más eficiente de crear una fórmula de columna que pueda hacer referencia a esta tabla de búsqueda para extraer valores de idoneidad basados en combinaciones únicas de las cuatro columnas de datos categóricos jerárquicos: especie/forma terrestre/cobertura terrestre/clase de madera?
Agradecería cualquier ayuda con esto. Vi una publicación anterior de @brady_brady sobre cómo crear una fórmula para una tabla de búsqueda mucho más simple, pero no pude entender cómo podría funcionar para un conjunto de datos jerárquico como este. ¡¡¡VAMOS, comunidad JMP, VAMOS!!!
Combinación y limpieza de datos