こんにちは、
数式参照を含む列を削除したいスクリプトがあります。これは JMP で簡単に行うことができます。不要な列を削除すると、「JMP アラート」が表示され、「式の削除」を選択します。その後、メタデータ列を削除できますが、テーブルには数式列で計算された結果が保持されます。
私の問題は、これをどのようにスクリプト化すればよいでしょうか?数式参照を含むメタデータ列を削除するオプションはありますか?JMP10を使用しています。以下の例を参照してください。
/*
bigClass = Open( "$SAMPLE_DATA/Big Class.jmp" );
bigClass << New Column( "height / weigh", Numeric, Continuous, Format( "Best", 12 ), Formula( :height / :weight ) );
bigClass << Delete Column( "height" );
bigClass << Delete Column( "weight" );
*/
ありがとう!
実は、私はすでにこの種の内容を JMP ウィッシュ リストに提出しており、JMP サポートと連絡を取っていました (現時点では明確な解決策はありませんが、回避策はまだ統合する時間がありませんでした)。
ウィッシュリストの項目:動的な数式の削除
JMP サポートとのチャットからいくつかの回避策オプションを見つけました。
Names Default to here(1);
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Test 1", Numeric, Formula( :height + :weight ) );
dt << New Column( "Test 2", Numeric, Formula( :height + :age ) );
keepCols = AssociativeArray({"name","Test 1","sex"});
formList = {};
formCols = {};
for(i=1,i<=ncol(dt),i++,
if(IsEmpty(Column(dt,i) << get formula),
Empty()
,
insertInto(formList,Column(dt,i) << get formula);
insertinto(formCols,i);
);
show(formList,formCols)
);
existingCols = dt << get column names(string);
For(i=1,i<=nitems(existingCols), i++,
there = keepCols[existingCols[i]];
If(there == 0,
for(j=1,j<=nitems(formList),j++,
nowCol = existingCols[i];
If(Contains(char(formList[j]),nowCol) > 0,
Print(nowCol);
//show(formCols[j]);
Try(Column(dt,formCols[j]) << delete formula);
,
Empty()
)
);
//dt << delete columns(eval(existingCols[i]))
)
);
For(i=1,i<=nitems(existingCols), i++,
there = keepCols[existingCols[i]];
If(there == 0,
dt << delete columns(eval(existingCols[i]))
)
);
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Test 1", Numeric, Formula( :height + :weight ) );
colList = {:age, :height, :name};
colListStr = {"age", "height", "name"};
failed = {};
//dt << Delete Columns( :age ); //works
//dt << Delete Columns( colList[1] ); //fails
//dt << Delete Columns( Column( colListStr[1] ) ); //works
For( i = 1, i <= N Items( colList ), i++,
//dt << Clear Column Selection;
//colList[i] << Set Selected;
str = "";
//str = Log Capture( dt << Delete Columns( colList[i] ) ); //fails
//str = Log Capture( dt << Delete Columns() ); //works for selected columns
str = Log Capture( dt << Delete Columns( Column( colListStr[i] ) ) ); //works
Show( str );
If( str != "",
Insert Into( failed, colList[i] )
);
);
Show( failed );
まだ解決策が見つかりません。 私が思いついたコーディングで最も面倒なのは、基本的にすべての数式を取得し、その数式に必要なローカル変数への数式列のマップを作成することです。 これは、列の削除が必要なときに動的に使用できます。
このようなことが、JMP が最初に警告をトリガーする方法を認識する根拠になっていると思います。 上記のきれいなものを思いつくには時間がかかるので、理想的には、JMP がブール関数か何かを提供する JSL 関数を作成できるようにします
最終的には、より正式な解決策を求めて JMP サポートとチャットすることになるでしょう (または、ウィッシュ リストで解決策を求めることもできます)。
こんにちは、ネイサン、
投稿された質問/問題の解決策は見つかりましたか?
私も同じことをしようとしています... 他の 1 つ以上の列の数式で使用されている列を削除したいと考えています。
を指定するのではなく動的にしたいのですが、列 << 式を削除"特定の列のステートメント。
これはちょっと古いですが、これに追加があるので、最初にここで試してみようと思います:)
削除したい列を参照している数式が含まれる列がわからない場合はどうすればよいですか。 何かを動的にしようとしていますが、競合がある場合に(手動で実行した場合と同様に)数式を自動的に削除するようにプリコードしたいのですが、それを可能にする構文が見つかりません。
「最も簡単な」方法は、問題にならないようにすべての数式を削除することですが、それは必要以上に少し極端に思えます。
@donhil Column("列名") << 式を削除します。
この問題をどのように解決したか教えていただけますか?数式を削除しようとしましたが、元の列の値が削除されてしまいました。列参照を含む列を削除する必要があります。ありがとう。