数式の連結と抑制皆さん、
多くのアクティブな列式を持ついくつかのテーブル(サンプル)があります。 ある時点での私のスクリプトは、すべてのテーブルを連結します。 ただし、連結されたすべてのデータを比較/オーバーレイするために、個々のテーブルデータ(サンプル)をそのまま保持したいので、数式を抑制したいと思います。 残念ながら、連結時に数式を適切にオフにできないようです。新しく連結された列が評価されているため、個々のサンプルデータが失われます。 コードを添付してこのビートがあったと思いましたが、最初のテーブルを別のフォルダーに再コピーすると、数式が「再アクティブ化」され、フラストレーションが発生しました。 現在の実装ではSuppressFormula Evaluationが機能していないため、適切な修正があれば、どのような入力でも構いません。
ニール
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:数式の連結と抑制あなたがする必要があるのは、連結の前に数式を削除することです。これにより、値が静的な値に変換され、問題は発生しなくなります。
:yourColumn << delete formula;
Re:数式の連結と抑制ジム、
返信ありがとうございます。 テーブルごとに数式を含む列が約10個あるので、一度にすべてを削除する「包括的」アプローチはありますか?
ニール
Re:数式の連結と抑制列名をリストに入れてから、リストをループして各列を削除することができます。
Re:数式の連結と抑制JMPは、標準化属性を使用してこれをインタラクティブに実行することもできます。
すべての列を選択し、列の1つを右クリックして、[属性の標準化]を選択します。

数式を追加してプロパティを削除し、[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:数式の連結と抑制返事が遅れて申し訳ありません。 すべてのフィードバックに感謝します。
まだすべての列を攻撃することなく、特定の列の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:数式の連結と抑制正しいデータテーブルにアクセスしようとしていますか? 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、保存なし)を使用して、不要になったデータテーブルを閉じることを忘れないでください。
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");