Betreff: Erstellen einer JMP-Formel zum Abrufen von Werten aus einer Nachschlagetabelle mit vier kategorialen VariablenEs gibt ein paar Probleme.Ich weiß nicht, mit welcher Version von JMP Sie arbeiten.Ich habe die Formel in JMP 16 entwickelt, die anscheinend einen Fehler hat.Daher wurde die Formel geändert, als ich sie in JMP 16 gespeichert habe, von dem, womit ich sie getestet hatte.Ich werde den Fehler melden, nachdem ich mit Ihrer Antwort fertig bin.Die richtige Formel zur Verwendung lautet:
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;
Ich habe diese Formel auch in meiner letzten Antwort bearbeitet, damit niemand ein Problem damit haben sollte.
Die letzten von Ihnen bereitgestellten Daten stimmen nicht mit der Lookup-Datentabelle überein.Sie haben einige der Kleinbuchstaben in Großbuchstaben geändert.Die ursprüngliche Formel, die ich geschrieben habe, kompensiert dies nicht.In der aktuellen Version habe ich erzwungen, dass alle Suchvorgänge in Großbuchstaben ausgeführt werden, sodass dies kein Problem mehr sein sollte.
Betreff: Erstellen einer JMP-Formel zum Abrufen von Werten aus einer Nachschlagetabelle mit vier kategorialen VariablenHey @txnelson
Beide Lösungen machen für mich Sinn. Ich würde die formelgesteuerte Lösung bevorzugen. Ich ging weiter und kopierte die Formel aus Ihrer Spalte "Formel abgeleitet ..." in der Tabelle "Beobachtete Arten", die Sie erstellt haben, in eine zweite JMP-Tabelle, in der ich tatsächlich die Indizes für die Eignung des Lebensraums berechne (im Anhang). Wenn ich versuche, die Formel anzuwenden, erhalte ich die folgende Fehlermeldung:

Ich bin mir nicht sicher, wie ich das beheben würde. Würde es Ihnen etwas ausmachen, einen Blick auf die Spalte „von der Formel abgeleitete Eignung“ in der beigefügten JMP-Datentabelle zu werfen und mir mitzuteilen, wo ich möglicherweise einen Fehler gemacht habe? Danke nochmal für deine Hilfe. Casey
Betreff: Erstellen einer JMP-Formel zum Abrufen von Werten aus einer Nachschlagetabelle mit vier kategorialen VariablenSie könnten vielleicht auch versuchen, Virtual Join zu verwenden.
Erstellen Sie eine Verknüpfungsspalte (z. B. alle vier Gruppierungswerte verketten) mit beiden Tabellen, die Sie haben:


Führen Sie dann einen virtuellen Join durch:
Tabelle mit Eignung als Link-ID:

Tabelle, in die Sie Sachen ziehen möchten:

Wenn ich mich richtig erinnere, mussten Sie für virtuelle Joins mindestens die Datentabelle haben, in der die Link-ID gespeichert wird.
Grundlagen zum Verständnis von Virtual Join in JMP
Virtuelle JMP On Air-Verbindungen
Betreff: Erstellen einer JMP-Formel zum Abrufen von Werten aus einer Nachschlagetabelle mit vier kategorialen VariablenBEARBEITEN: OOPS, ich habe den Teil verpasst, in dem Sie dies in einer Tabelle als Spalteneigenschaft haben möchten - ich dachte, Sie wollten nur einen Wert zurückgeben, der darauf basiert, dass jemand die 4 Werte in einem Dialogfeld oder so auswählt. Daher sollten Sie sich für etwas entscheiden, das Jim vorschlägt.
Beifall,
Brady
//////////////////
Hallo,
Es gibt viele Möglichkeiten, dies zu tun ... wahrscheinlich die "Lehrbuch" -Methode beinhaltet ein assoziatives Array mit mehrdimensionalen Schlüsseln, aber für Ihren Anwendungsfall ist es viel einfacher, so etwas wie das Folgende zu tun:
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);
Beifall,
Brady
Betreff: Erstellen einer JMP-Formel zum Abrufen von Werten aus einer Nachschlagetabelle mit vier kategorialen VariablenHier sind zwei Möglichkeiten, wie Sie Ihre Suche handhaben können.Die erste ist eine Formel, die ich erstellt und auf eine Beispieltabelle mit nur 3 Einträgen angewendet habe.Es schlägt in der Datentabelle der WEWA-Eignungsmatrix nach und zieht den Eignungswert ein.Es ist eine feine Formel, aber nicht sehr effizient.

Hier ist die Formel, die für die Spalte "Formel durive Eignung" verwendet wird.
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;
Die zweite Methode, die die Spalte „Eignung“ erstellt, wird mithilfe der Update-Plattform in JMP erstellt.Hier ist das Skript für die Erstellung
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
)
);
PSDie Datentabelle mit dem Namen Beobachtete Arten beginnt mit nur Sepcies, Landform, Landcover und Timber Class als Spalten.
Erstellen einer JMP-Formel zum Abrufen von Werten aus einer Nachschlagetabelle mit vier kategorialen VariablenHallo zusammen,
Ich entwickle Lebensraumeignungsindizes für 75 verschiedene Vogelarten. Ich habe für jede Vogelart Tabellen mit der gleichen Struktur wie die hier beschriebene (und als JMP-Datentabelle beigefügte). Ich werde sie nach Arten stapeln, sodass alle Arten in derselben Tabelle enthalten sind. Die beigefügte Tabelle ist hierarchisch aufgebaut. Die erste Ebene der Hierarchie sind die Arten (derzeit gibt es nur eine, aber irgendwann werden die Daten für alle 75 Arten in derselben Tabelle enthalten sein). Die nächste Ebene der Hierarchie ist die Geländeform (z. B. Tal, Terrasse oder Bergrücken). Sobald die Landform bestimmt wurde, ist die nächste Ebene der Hierarchie der Landbedeckungstyp (z. B. Laub-, Nadel-, Mischwald). Sobald die Landform-/Landbedeckungskombination bestimmt wurde, ist die nächste Ebene die Holzklasse (z. B. Strauchsämling, Schössling, Baumsägeholz, großes Sägeholz). Jede 4-Wege-Kombination aus Art, Landform, Landbedeckung und Holzklasse hat einen Lebensraumeignungswert zwischen 0 und 1. Zum Beispiel haben Wurmfressende Waldsänger, die ältere Laubwälder mögen, einen hohen Habitateignungswert (0,8) für die Kombination Tal/Laubholz/großes Schnittholz. Dieselbe Art hat einen niedrigeren Habitateignungswert (0,2) für die Kombination Kamm/Mischwald/Schössling. Wenn Sie sich die beigefügte Tabelle ansehen, wird Ihnen das klar werden.
Ich möchte in der Lage sein, eine Formel zu erstellen, die ich als Spalteneigenschaft verwenden kann, die auf diese Nachschlagetabelle verweist, um Habitateignungswerte basierend auf der Kombination aus Arten, Landform, Landbedeckung und Holzklasse für einen bestimmten Standort (von dem ich habe) zu finden Tausende). Mein erster Gedanke war, dies mit einer ausführlichen Wenn-Dann-Anweisung zu tun, aber es gibt 60 Landform-/Landbedeckungs-/Waldalterkombinationen für jede Art und 75 Arten. Ich weiß nicht, wie ich das anders machen kann als manuell im Formeleditor, und das kommt mir verrückt vor. Gibt es eine einfache und effizientere Möglichkeit, eine Spaltenformel zu erstellen, die auf diese Nachschlagetabelle verweisen kann, um Eignungswerte basierend auf eindeutigen Kombinationen der vier hierarchischen kategorialen Datenspalten abzurufen: Art/Landform/Landbedeckung/Holzklasse?
Ich wäre für jede Hilfe dabei dankbar. Ich habe einen älteren Beitrag von gesehen @brady_brady Ich habe mich mit der Erstellung einer Formel für eine viel einfachere Nachschlagetabelle beschäftigt, konnte aber nicht herausfinden, wie sie für einen hierarchischen Datensatz wie diesen funktionieren könnte. LOS, JMP-Community, LOS!!!
Datenmischung und -bereinigung