Löschen Sie Spalten mit Formelreferenz in JSLHallo,
Ich habe ein Skript, in dem ich Spalten löschen möchte, die einen Formelverweis enthalten.Dies ist in JMP ganz einfach: Wenn ich die unnötigen Spalten lösche, erhalte ich eine „JMP-Warnung“ und wähle „Formel entfernen“.Ich kann dann meine Metadatenspalten löschen, aber die Tabelle behält das in der Formelspalte berechnete Ergebnis bei.
Mein Problem ist: Wie kann ich das skripten?Gibt es eine Option zum Löschen einer Metadatenspalte, die eine Formelreferenz enthält?Ich verwende JMP10. Bitte sehen Sie sich das Beispiel unten an.
/*
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" );
*/
Danke!
Betreff: Spalten mit Formelreferenz in JSL löschenEs stellte sich heraus, dass ich so etwas bereits auf die JMP-Wunschliste gesetzt hatte und mit dem JMP-Support in Kontakt stand (noch keine klare Lösung, aber ein Workaround, für dessen Integration ich noch keine Zeit hatte).
Wunschlistenartikel: Dynamische Formelentfernung
Ein paar Workaround-Optionen aus meinen Chats mit JMP-Support.
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 );
Betreff: Spalten mit Formelreferenz in JSL löschenIch habe noch keine Lösung gefunden. Der aufwändigste Code, den ich mir ausgedacht habe, wäre im Wesentlichen, alle Formeln zu erfassen und eine Zuordnung der Formelspalte zu den für diese Formel erforderlichen lokalen Variablen zu erstellen. Dies könnte dann dynamisch verwendet werden, wenn Spaltenlöschungen durchgeführt werden müssen.
Ich gehe davon aus, dass so etwas die Grundlage dafür ist, wie JMP die Warnung überhaupt auslösen kann. Es würde einige Zeit dauern, bis ich etwas Sauberes für das oben Genannte finden würde. Idealerweise könnte JMP also eine JSL-Funktion erstellen, um uns eine boolesche Funktion oder ähnliches zu geben
Am Ende werde ich wahrscheinlich mit dem JMP-Support nach einer offizielleren Lösung chatten (oder auf der Wunschliste nach einer fragen).
Betreff: Spalten mit Formelreferenz in JSL löschenHallo Nathan,
Haben Sie eine Lösung für Ihre gestellte Frage/Ihr Problem gefunden?
Ich versuche das Gleiche zu tun ... Ich möchte eine Spalte löschen, die in einer Formel in einer oder mehreren anderen Spalten verwendet wird.
Ich möchte es dynamisch machen, anstatt ein „anzugeben“ col << Formel löschen" Anweisung für eine bestimmte Spalte.
Betreff: Spalten mit Formelreferenz in JSL löschenDas ist schon etwas alt, aber ich habe eine Ergänzung dazu und ich denke, ich werde es zuerst hier versuchen 
Was passiert, wenn ich die Spalten mit der Formel nicht kenne, die auf die Spalte verweisen, die ich löschen möchte? Ich versuche, etwas dynamisch zu machen, und ich würde es gerne vorcodieren, damit die Formel bei einem Konflikt automatisch gelöscht wird (genau wie wenn ich es manuell gemacht hätte), aber ich kann keine Syntax finden, die das ermöglicht.
Die „einfachste“ Methode besteht darin, einfach alle Formeln zu entfernen, damit es nie ein Problem darstellt, aber das scheint etwas extremer zu sein, als es sein muss.
Betreff: Spalten mit Formelreferenz in JSL löschen@DonHil Column("Spaltenname") << Formel löschen;
Betreff: Spalten mit Formelreferenz in JSL löschenKönnen Sie mir sagen, wie Sie dieses Problem gelöst haben?Ich habe versucht, die Formel zu entfernen, aber dadurch wurden die Werte in der ursprünglichen Spalte entfernt.Ich muss eine Spalte löschen, die einen Spaltenverweis enthält.Danke schön.
Betreff: Spalten mit Formelreferenz in JSL löschenEgal.Ich habe die Antwort gefunden:
https://community.jmp.com/message/48129#48129