你好,
我有一個腳本,我想在其中刪除包含公式引用的列。這在 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 支持人員討論更正式的解決方案(或者在願望清單中索要一個)。
嗨內森,
您是否找到了您發布的疑問/問題的解決方案?
我正在嘗試做同樣的事情... 我想刪除一個或多個其他列中的公式中使用的列。
我想讓它動態化而不是指定一個“ col << 刪除公式"特定列的語句。
這有點舊了,但我對此有一個補充,我想我會先在這裡嘗試:)
如果我不知道包含將引用我要刪除的列的公式的列怎麼辦? 我正在嘗試使某些內容動態化,並且我想對其進行預編碼,以便在存在衝突時它會自動刪除公式(就像我手動執行的那樣),但我找不到任何允許這樣做的語法。
“最簡單”的方法是刪除所有公式,這樣就不會成為問題,但這似乎比需要的更極端。
@唐希爾Column("列名") << 刪除公式;
你能告訴我你是如何解決這個問題的嗎?我嘗試刪除公式,但這刪除了原始列中的值。我需要刪除包含列引用的列。謝謝。