Thanks to both for the solutions - I ended up doing something with an associative array. I'll dump that in here with the hopes that one of these three approaches works for the next person trying to do this: Names Default To Here( 1 );
// Create the beginning table
dt = New Table( "Example",
Add Rows( 11 ),
New Column( "Group",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 1, 2, 3, 4, 5, 5, 5, 6, 7, 8] )
),
New Column( "Category",
Character,
"Nominal",
Set Values( {"A", "A", "B", "A", "D", "X", "Y", "Z", "A", "B", "C"} )
)
);
// let Summary do N Categories() for us
dt_sum = dt << Summary( Group( :Group ), N Categories( Category ) );
// the name of the column for which we want a list of the categories
category_col = "Category";
sum_colname = "Value List("|| category_col || ")";
// new col in the summary table to hold the list of values
dt_sum << New Column(sum_colname, Character);
// dump the group col into a matrix for quicker access
sum_groupdat = dt_sum:Group << Get As Matrix();
main_groupdat = dt:Group << Get As Matrix();
For( ri = 1, ri <= N Rows( dt_sum ), ri++,
// rows in main table that match the 'group by' col
inds = Loc( main_groupdat, sum_groupdat[ri] );
tmpaa = Associative Array( Column( dt, category_col )[inds] );
keys = tmpaa << Get Keys();
// if the category_col is numeric, need to convert the numbers to chars!
If( Is Number( keys[1] ),
charkeys = {};
For( ki = 1, ki <= N Items( keys ), ki++,
charkeys[ki] = Char( keys[ki] );
);
,
charkeys = keys
); // stuff all the items together and dump it into this row
valstr = Concat Items( charkeys, "," );
Column( dt_sum, sum_colname )[ri] = valstr;
);
... View more