名前による列の関連付けここで何か仕事がある
解決済み: 関連付けられた列を自動的にプロットする - JMP ユーザー コミュニティ
しかし、それは不必要に面倒な作業であることは確かです。列名が H (高) の文字で終わるため、他の点では一致するものの L (低) の文字で終わる列名と関連付ける必要があります。列名の最後の文字を削除した連想配列を作成できます。次に何をすればいいのかわからなくなってしまいました。
names default to here(1);
dt = Current Data Table();
colList = dt << get column names( string );
for each({col,index}, colList,
//colList[index] = substr(col,1,3)
colList[index] = Left(col,Length(col)-1)
);
grps = associative array(colList)<<GET keys=""></GET>
<P>たとえば、VT123ABCH は VT123ABCL に対してプロットする必要があります。</P><LINGO-LABS id="lingo-labs-848773" slang="en-US" mode="CREATE"><LINGO-LABEL>自動化とスクリプト</LINGO-LABEL></LINGO-LABS>Re: 名前による列の関連付けペアは常に存在しますか? テーブルにはこれらのペア以外の列がありますか? それらは特定の順序になっていますか?
編集:
実際の使用例に応じて、さらに改善される可能性が高い
names default to here(1);
dt = New Table("",
New Column("VT123ABCH"),
New Column("VT123ABCL")
);
collist = dt << get column names(string);
hcols = Filter Each({colname}, colList,
Ends With(colname, "H");
);
aa = Associative Array();
For Each({hcolname}, hcols,
lcolname = Left(hcolname, Length(hcolname) - 1) || "L";
If(dt << Has Column(lcolname),
aa[hcolname] = lcolname
);
);
Show(aa);Re: 名前による列の関連付けここにあなたが望むことを実現する方法の例があります

Names Default To Here( 1 );
dt =
// Open Data Table: semiconductor capability.jmp
// → Data Table( "semiconductor capability" )
Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
colNames = dt << get column names( continuous, string );
For Each( {col}, colNames,
If( Ends With( col, "1" ) & Contains( colNames, Substr( col, 1, Length( col ) - 1 ) || "2" ),
Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( As Column( col ) ), Y( As Column( Substr( col, 1, Length( col ) - 1 ) || "2" ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
)
);Re: 名前による列の関連付けジャルモ
以前よりもずっとすっきりしているように見えますが、このエラーが発生します。
「オブジェクト「データ テーブル」は「列があります」というメッセージを認識しません」
Re: 名前による列の関連付けこれはJMP18で追加されたものです

これをContains()に変更すれば、ほとんどの場合は問題ないはずです。
Contains(collist, lcolname)
Re: 名前による列の関連付けジャルモ
これは近いですが、hcolname は空ですが、lcolname には値があることに気づきました。hcolname をオブジェクトまたはリストとして設定する必要がありますか?
Re: 名前による列の関連付けhcols には、"H" で終わるすべての列のリストが含まれている必要があります。これは、For Each で使用され、各項目が hcolname として 1 つずつ使用される場合は、それぞれ使用されます。何が起こっているかを理解するために、デバッグ プリントを追加できます。また、これはこれを行う唯一の方法ではありません。たとえば、単一のループで簡単に実行できます。
Re: 名前による列の関連付け
ジャルモ
これで少し近づきましたが、lcolname は最終値まで入力されません。
For Each({hcolname, index}, hcols,
{lcolname, index}, hcols = Left(hcolname, Length(hcolname) - 1) || "L";
If(dt << Contains(collist, lcolname),
aa[hcolname] = lcolname
);
);Re: 名前による列の関連付け私の場合、うまく動作しているようです。サンプルテーブルを半導体の能力に変更し、最後にいくつかの数字をチェックすることができます。
Names default to here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
collist = dt << get column names(string);
hcols = Filter Each({colname}, colList,
Ends With(colname, "1");
);
aa = Associative Array();
For Each({hcolname}, hcols,
lcolname = Left(hcolname, Length(hcolname) - 1) || "2";
If(dt << Has Column(lcolname),
aa[hcolname] = lcolname
);
);
Show(aa);
aa = ["ESM1" => "ESM2", "FST1" => "FST2", "INM1" => "INM2", "IVP1" => "IVP2", "NPN1" => "NPN2", "PBA1" => "PBA2", "PLG1" => "PLG2", "PLY1" => "PLY2", "PNP1" => "PNP2", "RES1" => "RES2", "RSP1" => "RSP2", "SIT1" => "SIT2", "VDP1" => "VDP2", "VPM1" => "VPM2"];
しかし、もう少し設定オプションを追加して、少し異なるルートを選択することもできます。
Names Default To Here(1);
endchar1 = "1";
endchar2 = "2";
rgx_endchar1 = Eval Insert("(.+?)^endchar1^$");
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
collist = dt << get column names(string);
aa = Associative Array();
For Each({colname}, collist,
col_ptrn = Regex(colname, rgx_endchar1, "\1");
If(!IsMissing(col_ptrn), // ends with H
If(Contains(collist, col_ptrn || endchar2),
aa[col_ptrn || endchar1] = col_ptrn || endchar2;
);
);
);
show(aa);
どちらも同じ結果を返します
Re: 名前による列の関連付けジム
素晴らしいスクリプトで、非常にシンプルです。すべてのプロットを「コンパイル」ウィンドウに表示するように少し調整しました。
Names Default To Here( 1 );
dt = Current Data Table();
colNames = dt << get column names( continuous, string );
New Window( "Compilation",
For Each( {col}, colNames,
If(
Starts With( col, "VT" ) & Contains(
colNames,
Substr( col, 1, Length( col ) - 1 ) || "H"
),
Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables(
X( As Column( col ) ),
Y( As Column( Substr( col, 1, Length( col ) - 1 ) || "L" ) )
),
Wrap( :LOT ),
Elements(
Points( X, Y, Legend( 1 ) ),
Line Of Fit( X, Y, Legend( 3 ) )
)
)
)
)
);Re: 名前による列の関連付けジャルモ
JMP の奇妙さ。最初のものは動作しませんが、2 番目は動作します。JMP 17 でしょうか? 我慢していただきありがとうございます。