式を連結して抑制する皆さん、
アクティブな列数式が多数あるテーブル (サンプル) がいくつかあります。 私のスクリプトは、ある時点ですべてのテーブルを連結します。 ただし、連結されたすべてのデータを比較/オーバーレイするために、個々のテーブルデータ(サンプル)をそのまま保持したいため、数式を抑制したいと考えています。 残念ながら、連結時に数式を適切にオフにすることができないようで、新しく連結された列が評価され、個々のサンプル データが失われます。 コードを添付してこのビートを作成したと思いましたが、最初のテーブルを別のフォルダーに再コピーすると、数式が「再アクティブ化」され、多少のフラストレーションが発生しました。 現在の実装では式評価の抑制が機能していないため、適切な修正があれば、あらゆる意見をお待ちしています。
ニール
Con = Expr(
n = N Table();
dt = {};
// Sort list ascending (sample replicates)
For( i = 1, i <= n, i++,
table = data table(i);
insert into(dt, table);
sort list into(dt)
);
// Concatenate each file (sample replicates)
dt_all = Data Table( dt[1] );
For(i = 1, i <= n, i++,
If(i > 1,
Suppress Formula Eval(suppress=1);
dt_all << Concatenate(Invisible, dt[i], Append to first table);
)
);
Current Data Table(dt_all);
);
データアクセス品質およびプロセスエンジニアリングRe: 数式を連結して抑制するヤルノ
素晴らしいインプットです。 実際、私は昨夜から「Is Empty」ルートを検討し始めていました。 そこで、数式を削除して連結するという議論をまとめるために、私はあなたの提案を取り入れ、あなたの提案をコーディングすることでスキルセットを更新しました。 さらに、元の投稿とコードに従って、同様に機能する更新を加えました。
- 最初のブロックでは、「Is Empty」ステートメントを使用して数式列がないものを選択し、残りの数式を削除しています。
- 2番目のブロックは「Try」を使用していますが、最初はスクリプトインデックスを見ても、提案されたときは完全に理解できませんでした。 以前の試みのように実行は停止するだろうと思っていましたが、明らかにそうではありませんでした。
- 3 番目のブロックは、開いた最初のテーブルに対して「式の評価を抑制」を使用します。 他のすべてのテーブルはこの最初のテーブルに連結され、最終的に連結されたテーブル列が評価されない目的の出力も得られます。
私のスキル向上に役立つご意見をいただきましたことには、感謝してもしきれません。
ニール
For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
CN = file_1 << get column names(numeric);
For(j=1, j <= N Items(CN), j++,
result = Column(file_1, CN[j]) << Get Formula;
y = Is Empty(result);
If(y==0, Column(file_1, CN[j]) << delete formula);
);
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
CN = file_1 << get column names(numeric);
For(j=1, j <= N Items(CN), j++,
Try(Column(file_1, CN[j]) << delete formula);
);
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
file_1 << Suppress Formula Eval(1);
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");Re: 数式を連結して抑制する必ずしも数式が必要ない場合は、数式の代わりに << Set Each Value を使用できるため、数式を作成する必要さえありません (または、作成後すぐに数式を削除できます)。 ただし、必要な場合は、<< get Formula を使用して列に数式があるかどうかを確認し、結果が Empty() の場合は数式が存在しません (不足している数式を確認するには IsEmpty() を使用します)。または、「ブルート フォース」もできます。それをトライキャッチで。
数式を取得:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = New Column("Ratio");
result = col << Get Formula;
Show(result, IsEmpty(result));
col << Set Formula(:Height / :Weight);
col << Eval Formula;
result = col << Get Formula;
Show(result, IsEmpty(result));
トライキャッチ:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col = New Column("Ratio");
Try(col << Delete formula, show(exception_msg)); //the show part isn't necessary
次に、数式が含まれる列だけをループしたい場合は、リストを for ループして新しいリストを作成できます (JMP16 を使用している場合は、Filter Each を使用します)。
テーブル内のすべての数式を削除する方法に関するコミュニティの投稿もいくつかあります。たとえば、次のような投稿があります。テーブル内に存在するすべての数式を検索して削除します
Re: 数式を連結して抑制するジャーモ
問題を明らかにしていただきありがとうございます。 既存の公式がないと問題が発生するとは思いませんでした。 この事実を念頭に置いて、最初のテーブルの条件文を作成しました。 「file_1」には特定の列の式が一度削除されているため、これは明らかに機能しました。 添付のコードは単一列の例で機能しました。
数式が存在する必要があることは理解できましたが、問題はすべての列に数式がないことです。 したがって、すべての列名を取得すると、関連付けられた列を持たないサブセットが存在します。 ループする適切なリストを構築できるように、列に数式があるかどうかをテストする方法はありますか? それとも、列に数式を追加するたびに更新する必要があるリストを JSL に設定して、問題を「総当たり」で解決するのでしょうか?
ニール
For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");
Re: 数式を連結して抑制する正しいデータテーブルにアクセスしようとしているのでしょうか? for ループでは常に file_1 と同じファイルを開いています。
for ループ内にデバッグ出力を追加すると、問題の原因を特定するのに役立ちます。たとえば、次のようになります。
file_1 = Open(SD1 || b[1]);
show(file_1);
show(file_1 << Get Column Names("String")); //depending how many columns you have might not want to do this
show(Contains(file_1 << Get Column Names("String"), "Pore Diameter (um)"));
file_1:"Pore Diameter (um)" << delete formula;また、不要になったデータテーブルを Close(dtref, no save); で閉じることを忘れないでください。
Re: 数式を連結して抑制する返事が遅れて申し訳ありません。 すべてのフィードバックに感謝します。
まだすべての列を攻撃せずに、特定の列の 1 つの式を削除してみました。 ループの外側で「数式の削除」行を適用すると、数式が存在しないという望ましい結果が得られます。 ただし、同じ行がループ内にある場合、ファイルを開いた後、次のエラーが発生します。
「列の細孔直径 (um) には、'式の削除' のアクセスまたは評価に式がありません。式を削除/*###*/」
明らかに、なぜ問題が発生するのかを理解するための仕組みをまだ理解していません。 何か洞察を提供してもらえますか?
どうもありがとう。
For( i=1, i <= N Items(b), i++,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, Append to first table);
);
);
//file_1:"Pore Diameter (um)" << delete formula;
file_1 << Save(SD1 || "All Summary");
Close("All Summary");Re: 数式を連結して抑制するJMP は、属性の標準化を使用してこれを対話的に実行することもできます。
すべての列を選択し、いずれかの列を右クリックして「属性の標準化」を選択します。

プロパティを削除するための式を追加し、OK (または適用) を押します。

JMP16 を使用している場合、これは拡張ログに出力されます。
// Open Data Table: Wheat.jmp
// → Data Table("Wheat")
Open("$SAMPLE_DATA/Wheat.jmp");
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("Wheat"));
For Each({col, index},
{:Variety, :Yield, :Moisture, :Pred Formula Yield, :Cond Pred Formula Yield},
col << Delete Formula
);
Current Data Table(old dt);
);
そして、これはこれを処理する方法の良いアイデアを与えるでしょう(txnelsonが言ったのと同じ、リストをループして、途中で数式を削除します)。 << Get Column Names を使用してテーブル内のすべての列を取得することもできます。 数式を持たない列から数式を削除することはできません (また、拡張ログによって提供されるスクリプトはそのように直接動作しません) が、col << Delete 数式を Try() でラップすることでこれを回避できます。 拡張ログ スクリプトをクリーンアップすると、次のような結果になる可能性があります。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Wheat.jmp");
For Each({col}, dt << get column names(String),
Try(Column(dt, col) << Delete Formula)
);Re: 数式を連結して抑制するリストに列名を入力し、リストをループして各列を削除できます。
Re: 数式を連結して抑制するジム、
ご返信ありがとうございます。 テーブルごとに数式が含まれる列が約 10 列あるため、すべてを一度に削除する「包括的な」アプローチはありますか?
ニール
Re: 数式を連結して抑制する行う必要があるのは、連結する前に数式を削除することです。これにより、値が静的な値に変換され、問題はなくなります。
:yourColumn << delete formula;