Zusammenfassung mit String_AggregationHALLO,
Wie kann ich eine Tabelle codieren, die:
- gruppiert nach Zeichen und
- Erstellen Sie die entsprechenden Zellen mit conact_items (zB getrennt mit,).
- wie der SQL-Code "SELECT sex, String_Agg (Name, ',') als ConcatName FROM 'Big Class'" GROUP BY sex
Ich weiß, dass dies mit Looping möglich wäre, aber ich habe mich gefragt, ob es einen anderen und eleganteren Weg gibt.
Basierend auf der Tabelle "Big Class" sollte das Ergebnis folgendermaßen aussehen:
Geschlecht ConcatName
f KATIE, LOUISE, ....
m TIM, JAMES, ...
Danke vielmals
SkriptingBetreff: Zusammenfassung mit String_AggregationAnscheinend benötigt die tabellarische Plattform eine verkettete Zusammenfassungsfunktion.Hier ist eine Möglichkeit, eine einzelne Schleife in jeder Zeile einer Übersichtstabelle zu verwenden:
Names default to here(1);
dt = Open("$Sample_data/big class.jmp");
//Table with each unique sex and count
dtSum = (dt << Tabulate(
Add Table( Row Table( Grouping Columns( :sex ) ) )
)) << Make Into Data Table;
//blank column for concatenated names
dtSum << New Column("Names", Character, "Nominal");
//loop for each row/sex
for each row(dtSum,
// Use Eval and eval expression to insert the sex of the current
// row into the where expression of the other table
Eval(Eval Expr(
//fill in the names one row at a time, joining all values together
:Names = char( Concat Items(
//get names from main table matching the sex of the summary table
dt:name[ dt << Get Rows Where( dt:sex == Expr(:sex) ) ],
","
) )
))
);
Betreff: Zusammenfassung mit String_AggregationHier ist ein Versuch mit JSL (JMP 15). Dies kann auch interaktiv erfolgen, indem Spalten transformiert und kombiniert werden.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt1 = dt << Transpose( columns( :name ), By( :sex ), Output Table( "Test" ) );
dt1 << Combine Columns(
delimiter( ", " ),
Columns( 3 :: N Col( dt1 ) ),
Selected Columns are Indicator Columns( 0 ),
Column Name( "ConcatName" )
) << deletecolumns( 2, 4 :: N Col( dt1 ) );
Betreff: Zusammenfassung mit String_Aggregation@ich h und @Frau Ich habe Ihnen gute Antworten gegeben, aber ich habe bereits an dieser Lösung gearbeitet. Daher dachte ich, ich würde sie veröffentlichen, um einen anderen Weg zu zeigen, dies über JSL zu tun.
Nutzen Sie die Teilmenge von Option in Teilmenge Wir können eine Tabelle für jede Untergruppe abrufen und dann die Werte aus der Spalte Name abrufen und verwenden Concat Items () um die Zeichenfolge zu erstellen.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_list = dt << Subset(
By( :sex ),
All rows,
Selected columns only( 0 ),
columns( :name, :age, :height, :weight ),
private
);
nt = New Table();
group_col_name = Word( 1, dt_list[1] << get name, "=" );
nt << New Column( group_col_name, character );
nt << New Column( "concat name" );
nt << add rows( N Items( dt_list ) );
For( i = 1, i <= N Items( dt_list ), i++,
Column( nt, group_col_name )[i] = Word( 2, dt_list[i] << get name, "= " );
nt:concat name[i] = Concat Items( dt_list[i]:name << get values, ", " );
);
For( i = 1, i <= N Items( dt_list ), i++,
Close( dt_list[1], nosave )
);
dt_list = Empty();
Betreff: Zusammenfassung mit String_AggregationMir war nicht bewusst, dass Subset (By () ...) eine Liste zurückgibt. Kann sehr nützlich sein. Danke Jeff!
/ Marcus