Résumé avec String_AggregationSALUT,
Comment puis-je coder une table qui:
- regroupés en fonction des personnages et
- construire les cellules correspondantes avec conact_items (par exemple séparés par,).
- comme le code SQL "SELECT sex, String_Agg (Name, ',') as ConcatName FROM 'Big Class'" GROUP BY sex
Je sais que cela serait possible avec le bouclage mais je me demandais s'il y avait une autre manière plus élégante.
Basé sur le tableau "Big Class", le résultat devrait ressembler à ceci:
sexe ConcatName
f KATIE, LOUISE, ....
m TIM, JAMES, ...
Merci beaucoup
ScriptingRe: Résumé avec String_AggregationIl semble que la plate-forme de tabulation ait besoin d'une fonction récapitulative de concaténation.Voici une façon d'utiliser une seule boucle sur chaque ligne d'un tableau récapitulatif:
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) ) ],
","
) )
))
);
Re: Résumé avec String_AggregationVoici une tentative d'utilisation de JSL (JMP 15). Cela peut également être fait de manière interactive, en utilisant des colonnes de transformation et de combinaison.
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 ) );
Re: Résumé avec String_Aggregation@ih et @Mme vous ai donné de bonnes réponses mais je travaillais déjà sur cette solution, alors j'ai pensé la poster pour montrer une autre façon de le faire, via JSL.
Profitant de la Sous-ensemble par option dans Sous-ensemble nous pouvons obtenir une table pour chaque sous-groupe, puis obtenir les valeurs de la colonne Nom et utiliser Objets Concat () pour construire la chaîne de noms.
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();
Re: Résumé avec String_AggregationJe n'étais pas au courant de ce sous-ensemble (By () ...) renvoie une liste. Peut être très utile. Merci Jeff!
/ Marcus