Re: 4 つのカテゴリ変数を持つルックアップ テーブルから値を取得する JMP 数式の作成いくつかの問題があります。実行している JMP のバージョンがわかりません。私は明らかにバグがあるJMP 16で式を開発しました。そのため、JMP 16 に保存したときに、テストしたものから式が変更されました。返信が終わったら、バグを報告します。使用する正しい式は次のとおりです。
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;
前回の返信でこの数式も編集したので、誰も問題にならないはずです。
あなたが提供した最新のデータでは、ルックアップ データ テーブルとの不一致があります。小文字の一部を大文字に変更しました。私が書いた元の式はこれを補っていません。現在のバージョンでは、すべてのルックアップを強制的に大文字で行うようにしたので、問題はなくなりました。
Re: 4 つのカテゴリ変数を持つルックアップ テーブルから値を取得する JMP 式の作成おい@txnelson
あなたの解決策は両方とも私には理にかなっています。 私は数式駆動型のソリューションを好むでしょう。 私は先に進み、あなたが作成した観察種テーブルの「式の派生..」列から式をコピーして、実際に生息地適合性指数を計算している2番目のJMPテーブルにコピーしました(添付)。 式を適用しようとすると、次のエラーが発生します。

これをどのように修正するかわかりません。 添付のJMPデータ表の「式から導き出された適合性欄」を見て、どこに誤りがあるか教えていただけませんか? ご協力いただきありがとうございます。 ケーシー
Re: 4 つのカテゴリ変数を持つルックアップ テーブルから値を取得する JMP 式の作成Virtual Join を使用することもできます。
両方のテーブルにリンク列を作成します (たとえば、4 つのグループ値をすべて連結します)。


次に、仮想結合を実行します。
リンク ID としての適合性を持つテーブル:

プルしたいテーブル:

私の記憶が正しければ、仮想結合では、少なくともリンク ID となるデータテーブルを保存する必要がありました。
JMP で仮想結合を理解するための要点
JMP On Air バーチャル参加
Re: 4 つのカテゴリ変数を持つルックアップ テーブルから値を取得する JMP 式の作成編集:おっと、これを列プロパティとしてテーブルに入れたいという部分を見逃していました-ダイアログか何かで誰かが4つの値を選択することに基づいて値を返したいだけだと思いました。 したがって、ジムが提案するようなものを使用する必要があります。
乾杯、
ブレイディ
//////////////////
やあ、
これを行うには多くの方法があります...おそらく最も「教科書」的な方法は、多次元キーを持つ連想配列を含みますが、ユースケースでは、次のようなことを行う方がはるかに簡単です:
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);
乾杯、
ブレイディ
Re: 4 つのカテゴリ変数を持つルックアップ テーブルから値を取得する JMP 式の作成ルックアップを処理する 2 つの方法を次に示します。1 つ目は、3 つのエントリしかないサンプル テーブルに作成して適用した数式です。WEWA 適合性マトリックス データ テーブルを検索し、適合性値を取得します。これは優れた式ですが、あまり効率的ではありません。

「適合性を導き出す式」列に使用した式は次のとおりです。
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;
「適合性」という列を作成する 2 つ目の方法は、JMP の Update プラットフォームを使用して作成されます。これを作成するためのスクリプトは次のとおりです。
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
)
);
PSObserved Species と呼ばれるデータ テーブルは、列として Sepcies、Landform、Landcover、および Timber Class のみで始まります。
4 つのカテゴリ変数を含むルックアップ テーブルから値を取得するための JMP 式の作成こんにちは、みんな、
私は 75 種類の鳥類の生息地適合性指数を開発しています。 ここで説明したものと同じ構造のテーブル (JMP データ テーブルとして添付) を鳥の種ごとに用意しています。 すべての種が同じ表に含まれるように、種ごとに積み重ねます。 添付のテーブルは階層構造になっています。 階層の最初のレベルは種です (現在は 1 種のみですが、最終的には 75 種すべてのデータが同じテーブルに含まれる予定です)。 階層の次のレベルは地形 (谷、段丘、尾根など) です。 地形が決定されると、階層の次のレベルは土地被覆タイプ (落葉樹、針葉樹、混交林など) になります。 地形と土地被覆の組み合わせが決定されると、次のレベルは木材のクラス (低木苗木、苗木、ポールソー材、大型のこぎり材など) です。 種、地形、土地被覆、木材クラスの 4 つの組み合わせのそれぞれに、0 から 1 までの生息地適合性値があります。 たとえば、古い落葉樹林を好む虫食いムシクイは、谷/落葉樹/大型鋸材の組み合わせに対して高い生息地適性値 (0.8) を持っています。 この同じ種は、尾根/混交林/苗木の組み合わせの生息地適性値が低くなります (0.2)。 添付の表を見れば、それがよくわかります。
このルックアップテーブルを参照する列プロパティとして使用できる式を作成して、特定のサイト(私が持っているもの)の種/地形/土地被覆/木材クラスの組み合わせに基づいて生息地適合性の値を見つけられるようにしたいと考えています。何千)。 私が最初に考えたのは、精緻な if then ステートメントでこれを行うことでしたが、種ごとに 60 の地形/土地被覆/森林年齢の組み合わせがあり、75 種があります。 数式エディターで手動でこれを行う以外の方法がわかりませんが、これはクレイジーに思えます。 このルックアップ テーブルを参照して、種 / 地形 / 土地被覆 / 木材クラスの 4 つの階層カテゴリ データ列の一意の組み合わせに基づいて適合性値を取得できる列式を作成する、より簡単で効率的な方法はありますか?
ご協力いただければ幸いです。 の古い投稿を見ました@brady_bradyもっと単純なルックアップ テーブルの数式を作成する方法については説明しましたが、このような階層データ セットでそれがどのように機能するのかわかりませんでした。 ゴー、JMP コミュニティ、ゴー!!!
データのブレンディングとクリーンアップ