你好,
我有一个脚本,我想在其中删除包含公式引用的列。这在 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("列名") << 删除公式;
你能告诉我你是如何解决这个问题的吗?我尝试删除公式,但这删除了原始列中的值。我需要删除包含列引用的列。谢谢。