Führen Sie eine Formel für Teilmengenspalten durchIch habe ein Skript erstellt, um eine Teilmengentabelle einer größeren Tabelle zu erstellen, aber es funktioniert nicht richtig. Mein Ziel besteht darin, dass der Benutzer die Spalten auswählt, die er in der Teilmengentabelle haben möchte, und dass das Skript dann eine Formel für die Spalten ausführt, bevor es die Daten in die neue Tabelle einfügt.Bisher ruft mein Skript das Dialogfeld für die Benutzerinteraktion auf, aber wenn ich die Spalten im Dialogfeld auswähle, werden sie nicht in der Teilmengentabelle angezeigt. Ich bin mir nicht sicher, wo mein Problem darin liegt. (Hinweis: Der Benutzer wählt Spalten mit Daten und nicht mit Beispielinformationen aus, also im Beispiel Spalten mit Spaltennamen, die mit „Spalte 10 …“ beginnen.)
Außerdem bin ich mir nicht sicher, wo ich die Formel einfügen soll. Grundsätzlich enthalten die Spalten, die der Benutzer im Dialogfeld auswählt, einige Zellen mit <-Symbolen. Für die neue Teilmengentabelle möchte ich, dass jede Zelle ohne ein Kleiner-als-Symbol auf Null gesetzt wird und jede Zelle mit einem <-Symbol das <-Symbol erhält entfernt und nur die Zahl daneben in der Teilmengentabelle platziert. Die neue Teilmengentabelle enthält also Nullen für erkannte Werte und die Nachweisgrenze für die nicht erkannten Verbindungen.
Hier ist mein bisheriges Skript.
Names Default To Here( 1 );
dt = Data Table("Example Data");
col_dlg = new window("Column Select",
panelbox("Select columns to create NonDetect table with",
col_clist = collistbox(all, width(200)),
buttonbox("Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset(Output Table("NonDetect"),columns(col_clist));
col_dlg << close window;
)
)
);Vielen Dank für jede Hilfe!
Betreff: Formel für Teilmengenspalten durchführenJetzt ist es Ihre Chance, die Mitwirkenden der Diskussions-Community zu bezahlen. Schauen Sie sich den Scripting Guide und den Scripting Index an, werden Sie ein erfahrener Benutzer und geben Sie durch Ihre Teilnahme etwas zurück.
Betreff: Formel für Teilmengenspalten durchführenDas hat funktioniert! Vielen Dank für Ihre Zeit und Geduld. Ich schätze es wirklich!
Lacey
Betreff: Formel für Teilmengenspalten durchführenEs stellte sich heraus, dass die Substr()-Funktion in den ausgewählten Zeilen nicht funktioniert (ich bin mir nicht sicher, warum), also habe ich den Code ein wenig geändert und getestet (ich hatte meine letzte Version offensichtlich nicht getestet).
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select all of the currently non selected columns and unselect the current ones
dt2 << select where( Contains( As Column( dt2, selected_column_list[i] ), "<" ) == 0 );
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows] = "0";
// Find the rows with the "<" in them
dt2 << invert row selection;
selRows = dt2 << get selected rows;
//selRows= dt2 << Get Rows Where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
For( k = 1, k <= N Rows( selRows ), k++,
Column( dt2, selected_column_list[i] )[selRows[k]] = Substr( As Column( dt2, selected_column_list[i] )[selRows[k]], 2 )
);
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) << modeling type( continuous );
);
col_dlg << close window;
)
)
);Betreff: Formel für Teilmengenspalten durchführenVielleicht habe ich das ( an der falschen Stelle platziert? Hier ist, was ich gerade habe.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] =
substr(As Column( dt2, selected_column_list[i] ),2);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Betreff: Formel für Teilmengenspalten durchführenDanke für die schnelle Antwort! Ich habe 2 versucht, aber am Ende bekomme ich Nullen aus den erkannten Werten und Leerzeichen für alle Zellen mit <-Symbolen. Dasselbe Ergebnis, das ich mit 1 bekomme.
Betreff: Formel für Teilmengenspalten durchführenUps.....mein Fehler, ändere die „1“ in der Funktion substr() in eine „2“ und das sollte das Problem beheben
Betreff: Formel für Teilmengenspalten durchführenDer zweite Code, den Sie für die zweite Tabelle gesendet haben, scheint nicht zu funktionieren. Ich habe ein paar Stunden damit verbracht, verschiedene Dinge auszuprobieren. Mir ist aufgefallen, dass zwei ('s fehlten. Dadurch konnte der Code fehlerfrei ausgeführt werden. Der Teil des Codes, der das Symbol „<“ entfernt, scheint jedoch nicht richtig zu funktionieren. Wenn ich dieses Codebit entferne, endet die Tabelle mit den erkannten Werten als 0 und den noch intakten ND-Werten mit dem <-Symbol. Ich habe versucht, damit herumzuspielen, habe es aber noch nicht herausgefunden. Irgendwelche Hinweise? 

Danke!
Betreff: Formel für Teilmengenspalten durchführenHier ist der Code zur Bearbeitung Ihres zweiten Falls
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] =
substr(As Column( dt2, selected_column_list[i] ),1);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Betreff: Formel für Teilmengenspalten durchführenDas funktioniert hervorragend für die Detect-Tabelle. Daher möchte ich für meine zweite Tabelle die Werte ändern, die auf Null gesetzt werden, sodass dieser Ansatz meiner Meinung nach nicht funktionieren wird. Ich möchte die Zellen mit dem <-Symbol behalten und den Rest der Zellen auf Null setzen. Dann möchte ich das <-Symbol entfernen und nur numerische Werte belassen. In meinem Kopf stelle ich mir vor, ich würde die Schleife so ausführen, wie Sie sie haben, und dann eine if/else-Anweisung hinzufügen?
Und vielen Dank für die Veröffentlichung der if/else-Anweisung. Mein Problem bestand darin, dass num() nicht vor meinem Spaltennamen für else stand!
Betreff: Formel für Teilmengenspalten durchführenHier ist eine Änderung im Skript, die meiner Meinung nach für Sie ein guter Ansatz sein könnte.Was ich als das interpretiere, was Sie tun möchten, ist, eine numerische Spalte zu erstellen, die die Werte aus den von Ihnen ausgewählten Zeichenspalten enthält. Wenn die Werte jedoch ein „<“-Symbol enthalten, machen Sie diese Einträge zu einer Null (0).Das folgende Skript erledigt dies, ohne neue Spalten zu erstellen.Es wandelt die Spalten in numerische Spalten um und setzt die „<“-Zellen auf Null.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Change the column to numeric/continuous
// The names in the data table are very complex, containing symbols, etc.
// that JMP will confuse as operators. Therefore, using the Column()
// function, or a :Name(" ") function to wrap around the column name
// needs to be used
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
// Now find all of the rows in the table that have Missing Values
// in the target column, and then set them all to "0" in one
// statement
Column( dt2, selected_column_list[i] )[dt << get rows where(
Is Missing( As Column( dt2, selected_column_list[i] ) )
)] = 0;
);
col_dlg << close window;
)
)
);
Sie könnten neue Spalten erstellen und eine Formel festlegen, wie Sie es in Ihrer letzten Antwort angegeben haben.Das Problem, das Sie mit Ihren Angaben haben, ist der Umgang mit den komplexen Spaltennamen. So würde das funktionieren
If( Contains( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ), "<" ),
0,
Num( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ) )
)
Betreff: Formel für Teilmengenspalten durchführenIch glaube, da habe ich meine Probleme, ich beherrsche Excel sehr gut und habe meine gesamte Datenanalyse seit 9 Jahren darin durchgeführt. Ich versuche nur, zu übertragen, und es fällt mir (unter anderem) schwer, mit meinen Wenn/Dann-Anweisungen in JMP umzugehen. Ich werde es in Excel schreiben und vielleicht könnten Sie helfen?
Ich werde zwei dieser Teilmengentabellen erstellen. Eine für erkannte Werte und eine für nicht erkannte Werte. Für die erkannten Werte würde ich eine if/then-Anweisung wie =if(isnumber(J2),J2,0) ausführen. Für die nicht erkannten Werte würde ich so etwas wie =if(isnumber(J2),0,J2) tun.
Ich habe versucht, es in JMP umzustellen
Wenn ( Enthält (: Spalte 10 1,2,3,4,6,7,8-HpCDD , „<“ ), 0 ,:Spalte 10 1,2,3,4,6,7,8-HpCDD )
aber es scheint nicht zu funktionieren, selbst wenn ich selbst eine Spalte erstelle und die Formel einfüge.
Im Grunde genommen werde ich in mein Skript zwei Teile einbinden, einen für die NonDetect-Tabelle und einen für die Detect-Tabelle, und ich möchte, dass die Spalten als solche transformiert werden, indem ich die if then-Anweisung verwende. Am Ende werde ich die beiden Datentabellen an R senden, um die nicht erkannten Werte mithilfe der in der NonDetect-Teilmenge verbleibenden DLs zu imputieren. Ich hoffe, das erklärt es?
Betreff: Formel für Teilmengenspalten durchführenWelche Formel möchten Sie berechnen?Ist es wirklich erforderlich, eine neue Spalte zu erstellen?Denken Sie daran, dass dies kein Excel ist.Um Werte oder Ergebnisse zu generieren, müssen diese nicht in Spalten platziert werden. Es gibt andere Strukturen.Können Sie genauer beschreiben, was Sie tun möchten?
Betreff: Formel für Teilmengenspalten durchführenAh, das funktioniert.
Gibt es eine Möglichkeit, eine Formel für die Daten zu vervollständigen, bevor sie in die neue Tabelle eingefügt wird? Wenn nicht, dachte ich mir, neue Spalten in der Teilmengentabelle zu erstellen, die Berechnung in den neuen Spalten abzuschließen und dann die ursprünglichen Spalten zu löschen (per Skript). Gibt es eine effizientere Möglichkeit, dies zu tun?
Danke!
Betreff: Formel für Teilmengenspalten durchführenSie haben auf das Anzeigeobjekt „col_clist“ verwiesen und nicht auf dessen Inhalt, den Sie in „Selected_column_list“ platziert hatten.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
col_dlg << close window;
)
)
);