Wählen Sie doppelte Zeileneinträge aus, speichern Sie deren Index und erstellen Sie dann eine neue Liste, die die duplizierten Zeilen nicht enthält.Hallo.
Dies ist eine Fortsetzung der Frage in diesem Link: Gelöst: Werte von „select where“ abrufen – JMP-Benutzer-Community . Am Ende dieser Diskussion (im bereitgestellten Link) gibt es eine Möglichkeit, eine JSL zu finden, die bestimmte Zeilen auswählt und sie mit der Funktion show() ausgibt. In einem anderen Beitrag (ich habe den Link dazu verloren) gab es eine Methode, doppelte Zeilen mithilfe der Funktion „Doppelte Zeile auswählen()“ auszuwählen und sie dann zu löschen.
Mein Ziel ist es, doppelte Zeilen auszuwählen und dann deren Index für eine ausgewählte Spalte in der Tabelle abzurufen. Ich möchte beispielsweise die doppelten Einträge für die Altersspalte in der großen Klassentabelle finden.
Das zweite Ziel besteht darin, eine neue Spalte zu erstellen, die nur die eindeutigen Zeilen enthält, ohne die duplizierte Zeile zu löschen.
Jede Anleitung ist willkommen.
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit:age << Select Duplicate Rows( Match (:age, :age ) );
Group1List = (dt_limit:age[dt_limit << get selected rows]);
theCount = N Rows( dt << get selected rows);
Show( Group1List);
Automatisierung und SkripterstellungGrundlegende Datenanalyse und ModellierungDatenzugriffBetreff: Duplizierte Zeileneinträge auswählen, deren Index speichern und dann eine neue Liste erstellen, die die duplizierten Zeilen nicht enthält.Danke @Jed_Campbell . Das ist gut, vielen Dank!
Ich versuche, diese Spalte für weitere Aktionen in einer Liste zu erfassen. Könnten Sie mir dabei helfen? Danke!
Betreff: Duplizierte Zeileneinträge auswählen, deren Index speichern und dann eine neue Liste erstellen, die die duplizierten Zeilen nicht enthält.Diese am Ende Ihres Skripts hinzugefügte Zeile sollte diese Spalte in eine Liste einfügen:
future_list = as list (dt_limit:Unique << Get Values);
Betreff: Duplizierte Zeileneinträge auswählen, deren Index speichern und dann eine neue Liste erstellen, die die duplizierten Zeilen nicht enthält.Danke @Jed_Campbell . Es funktioniert einwandfrei.
Ein weiteres Problem, auf das ich im Moment stoße, ist, dass ich statt einer Spalte, z. B. Alter, eine Liste mit Spalten hätte, z. B. [Alter, Größe, Gewicht usw.]. Wie würde sich der Code ändern? Ich habe versucht, eine Kombination aus Spalten und Auswertung zu verwenden, um den Listeneintrag als Spalte abzurufen. Ich weiß, dass der folgende Code funktioniert, aber wie würde ich ihn so ändern, dass er für jede Spaltenliste funktioniert? Hätte man so etwas wie As Column (ListOfTargetCol[i])[i] ); ODER :(ListOfTargetCol[i])[i] ); Bedeutet das, dass jmp den i-ten Eintrag der Liste und dann den i-ten Eintrag dieser Spalte (der Spalte) abruft? Ich bin neu in JSL und nicht sicher, wie es aufgebaut ist. Bitte geben Sie Hinweise zur Behebung dieses Problems.
Als Referenz verwende ich einen ähnlichen Code wie den, den Sie oben angegeben haben, und habe versucht, so etwas hinzuzufügen: Ich bin auch gespannt, ob es anders sein wird, wenn es sich um eine Liste von Namen einer Zeichenfolge wie die unten aufgeführten handelt. Vielen Dank!
ListOfTargetCol = { age, height, weight};
StringOfTargetCol = { "age", "height", "weight"};
... dt_limit:Unique[i] = dt_limit:( As coulmn(ListOfTargetCol[1])) [i]...
Betreff: Duplizierte Zeileneinträge auswählen, deren Index speichern und dann eine neue Liste erstellen, die die duplizierten Zeilen nicht enthält.Ist so etwas das, wonach Sie suchen? Möglicherweise gibt es elegantere Möglichkeiten, dies zu erreichen, aber hier ist eine Möglichkeit, eine neue Spalte nur mit der ersten eindeutigen Zeile zu erstellen.
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit << Select Duplicate Rows( Match (:age ) );
Group1List = (dt_limit << get selected rows);
theCount = N Items (Group1List);
//create a new column that has only the unique rows without deleting the duplicated row
dt_limit << Invert Row Selection;
UniqueList = dt_limit << Get Selected Rows;
dt_limit << new column ("Unique");
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);Betreff: Duplizierte Zeileneinträge auswählen, deren Index speichern und dann eine neue Liste erstellen, die die duplizierten Zeilen nicht enthält.Wenn Sie die Auswahlen nicht benötigen, können Sie auch Formel/Zusammenfassung (oder viele andere Optionen) verwenden.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;
// Option2
dt << New Column("Row", Numeric, "Continuous", Formula(Row()));
dt_summary = dt << Summary(
Group(:age),
Min(:Row),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
Column(dt_summary, 1) << Set Name("R2");
dt << Update(With(dt_summary), Match Columns(:Row = :Row));
Close(dt_summary, no save);

Betreff: Wählen Sie doppelte Zeileneinträge aus, speichern Sie deren Index und erstellen Sie dann eine neue Liste, die die doppelten Zeilen nicht enthält.Vielen Dank @jthi für Ihre Hilfe! Beide Lösungen funktionieren gut, aber ich bin immer noch verwirrt über die Syntax, die ich verwenden soll.
In the loop below, we have the dt:age[i] which iterates through the "age" column in the dt_limit loop. <BR />What if I want to have more than one column to iterate through.<BR /><BR /> The only solution I can find (and works with no error) is to copy past the loop for <BR />all the needed columns i.e. age, height, ..etc. It is just not efficient and will not work for a large number of columns. <BR /><BR />Any suggestions would be appreciated.
<BR />
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);Betreff: Wählen Sie doppelte Zeileneinträge aus, speichern Sie deren Index und erstellen Sie dann eine neue Liste, die die doppelten Zeilen nicht enthält.Ich bin mir nicht ganz sicher, was Sie versuchen. Sie können Col Min weitere Spalten als Byvars hinzufügen.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;

Spalte Minimum(Name, )
Betreff: Wählen Sie doppelte Zeileneinträge aus, speichern Sie deren Index und erstellen Sie dann eine neue Liste, die die doppelten Zeilen nicht enthält.Danke @jthi . Stimmt. Ich kann einfach weitere Spalten hinzufügen, wie Sie oben vorgeschlagen haben. Ich versuche jedoch, die Lösung zu verallgemeinern. Ich versuche, die Benutzereingaben für die auszuwertenden Spalten zu übernehmen. Platziere sie in einer Liste. Und bewerte sie dann alle. Beispielsweise kann der Benutzer nur Alter und Größe auswählen. Der Code muss so flexibel wie möglich sein.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
TargetList = {age, sex, height};
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;Betreff: Wählen Sie doppelte Zeileneinträge aus, speichern Sie deren Index und erstellen Sie dann eine neue Liste, die die doppelten Zeilen nicht enthält.Sie können die Formel mit Ausdrücken erstellen
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
sel_cols = {"age", "sex", "height"};
colmin_expr = Expr(Col Min(Row()));
For Each({sel_col}, sel_cols,
Insert Into(colmin_expr, Name Expr(AsColumn(dt, sel_col)))
);
Eval(Substitute(
Expr(new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == _colminformula_, :age, .)
))),
Expr(_colminformula_), Name Expr(colmin_expr)
));
dt << Run Formulas;
new_col << Delete Formula;
Sie sollten auch in der Lage sein, die Zusammenfassungsversion relativ einfach zu ändern, um mit Eingaben aus einer Liste zu arbeiten