Riepilogo con String_AggregationCIAO,
Come posso codificare una tabella che:
- raggruppati in base ai personaggi e
- costruisci le celle corrispondenti con conact_items (ad esempio separate con ,).
- come il codice SQL "SELECT sex, String_Agg(Name,', ') as ConcatName FROM 'Big Class'" GRUPPO PER sesso
So che questo sarebbe possibile con il looping, ma mi chiedevo se esiste un altro modo più elegante.
In base alla tabella "Big Class", il risultato dovrebbe assomigliare a questo:
sesso ConcatNome
f KATIE, LOUISE, ....
m TIM, JAMES, ...
Grazie molto
Accesso ai datiRi: Riepilogo con String_AggregationSembra che la piattaforma tabulate necessiti di una funzione di riepilogo concatenata.Ecco un modo per utilizzare un singolo ciclo su ogni riga di una tabella di riepilogo:
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) ) ],
","
) )
))
);
Ri: Riepilogo con String_AggregationEcco un tentativo di utilizzare JSL (JMP 15). Può essere fatto anche in modo interattivo, usando la trasformazione e la combinazione di colonne.
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 ) );
Ri: Riepilogo con String_Aggregation@ih e @SM ti ho dato buone risposte ma stavo già lavorando a questa soluzione, quindi ho pensato di postarla per mostrare un altro modo per farlo, tramite JSL.
Approfittando del Sottoinsieme di opzione in Sottoinsieme possiamo ottenere una tabella per ogni sottogruppo, quindi ottenere i valori dalla colonna Nome e utilizzare Elementi concatenati () per costruire la stringa di nomi.
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();
Ri: Riepilogo con String_AggregationNon ero a conoscenza di quel sottoinsieme (By () ...) restituisce un elenco. Può essere molto utile. Grazie Jeff!
/ Marcus