Benötigen Sie Hilfe beim JSL-Skript für die Partitionsauswahl mit mehreren SegmentenDer folgende Code hilft beim Erstellen neuer Tabellen mit guter Auffüllung, bei geöffnetem Partitionsfenster kann jedoch nur eine Auswahl für schlechte Auffüllungen getroffen werden. Ich möchte, dass der Partitionsbildschirm geöffnet ist, aber der Benutzer kann mehr als einen Blattknoten für die schlechte Population auswählen und der Rest geht an die gute Population. Gibt es eine Möglichkeit, dies zu tun?
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
filepath = "$Desktop";
nw = New window("part test",
V List Box(
obj = dt << Partition(
Y(:NPN1),
X(:PNP1, :PNP2, :PNP3, :PNP4, :NPN2, :NPN3, :NPN4),
Method("Decision Tree")
),
Button box("make splits",
make_splits_expr
);
)
);
obj << ShowGraph(0);
obj << SplitBest(4);
obj << Show Split Count(1);
obj << Show Split Prob(1);
make_splits_expr = Expr(
sel_rows = dt << Get Selected Rows;
If(N Items(sel_rows > 0),
dtTemp = dt << subset(invisible, rows(), selected columns(0));
Close(dtTemp, save(filepath || "\" || "badpopulation.jmp"));
dt << invert row selection;
sel_rows = dt << Get Selected Rows;
dtSEG = dt << subset(invisible, selected rows(1), selected columns(0));
Close(dtSEG, save(filepath || "\" || "goodpopulation.jmp"));
);
dt << Clear Selected;
);Ich möchte in der Lage sein, die gelb hervorgehobenen Knoten als schlechte Population auszuwählen und den Rest als gute Population, wobei ich dieses Partitionsfenster geöffnet halte und die Knotenauswahl ändern kann, wenn ich mit dem Ergebnis nicht zufrieden bin.

Gibt es eine Möglichkeit, dies zu erreichen?
DatenzugriffWindowsBetreff: Benötigen Sie Hilfe beim JSL-Skript für die Partitionsauswahl mit mehreren Segmenten?Hier ist ein kleiner Vorgeschmack darauf:
lstSelectedRows = {};
dt = Open("$SAMPLE_DATA\semiconductor capability.jmp");
filepath = "$Desktop";
nw = New window("part test",
V List Box(
obj = dt << Partition(
Y(:NPN1),
X(:PNP1, :PNP2, :PNP3, :PNP4, :NPN2, :NPN3, :NPN4),
Method("Decision Tree")
),
HListBox(
TextBox("rows selected in node = "),
tb1 = TextBox("0"),
),
HListBox(
TextBox("total rows selected = "),
tb2 = TextBox("0")
),
ButtonBox("clear all selections",
clear_selections
, underlinestyle(1)
),
Button box("make splits",
make_splits_expr
);
)
);
// in the partition platform from any node you can select rows
// but we need to detect this event ... do it by detecting
// row state changes in the table
rs = dt << make row state handler(
function({a},
cdt = current data table();
sel = cdt << Get Selected Rows;
insertinto(lstSelectedRows,aslist(sel));
tmp = [=>];
insertInto( tmp, lstSelectedRows );
lstSelectedRows = tmp << getKeys; // <--- dedupe
tb1 << settext(char(nrows(sel)));
tb2 << settext(char(nitems(lstSelectedRows)));
)
);
obj << ShowGraph(0);
obj << SplitBest(4);
obj << Show Split Count(1);
obj << Show Split Prob(1);
clear_selections = Expr(
dt << Clear Selected;
tb1 << settext("0");
tb2 << settext("0");
lstSelectedRows = {};
);
make_splits_expr = Expr(
dt << select rows(lstSelectedRows);
sel_rows = dt << Get Selected Rows;
tb1 << settext(char(nrows(sel_rows)));
If(N Items(sel_rows > 0),
dtTemp = dt << subset(rows(), selected columns(0), output table("Selected"));
//Close(dtTemp, save(filepath || "\" || "badpopulation.jmp"));
dt << invert row selection;
sel_rows = dt << Get Selected Rows;
dtSEG = dt << subset(selected rows(1), selected columns(0), output table("Not Selected"));
//Close(dtSEG, save(filepath || "\" || "goodpopulation.jmp"));
);
dt << Clear Selected;
);
Ich habe möglicherweise nicht verstanden, was Sie tun möchten, und werde daher nicht versuchen, zu erklären, was mit dem Code vor sich geht. Wenn es jedoch das ist, was Sie versuchen, erkläre ich Ihnen gerne, was vor sich geht. Lass es mich wissen.Ein Teil des Codes ist etwas hässlich, aber ich wollte nur sehen, ob ich verstehen kann, was Sie tun wollten.Anstatt zwei Tabellen auf dem Desktop zu speichern, erstelle ich zu meiner eigenen Bequemlichkeit zwei (sichtbare Tabellen) mit den Titeln „ausgewählt“ und „nicht ausgewählt“.