Here is a different approach to solving the problem. This approach is a script. It should be more efficient that the previous single formula column approach. It first finds the first values, extracts them to a new table, and then uses the Update platform to merge the values back into the original data table.
names default to here(1);
dt=current data table();
// Create a column that finds the first values
dt<<new column("theSelected",formula(If( :group != Lag( :group ),
flag = 0
);
If( :score != 10000000000 & flag == 0,
flag = 1;
value = 1;
,
value = .
);
value;));
// Select all of the rows that are marked as first values
dt<<select where(:theSelected==1);
// Create a subset of the marked rows
dtSel=dt<<subset(selected rows(1),columns({group,score}));
// Delete the marking column in the original data table
dt<<delete columns(theSelected);
// Change the name or the score column in the new data table
// because when merged back into the original table it needs
// a different name
dtSel:Score << set name("First Value");
// Merge the first found data back into the original table
dt << Update(
With( dtSel ),
Match Columns( :group = :group )
);
// Delete the first selected data table
close(dtSel,nosave);
// Remove row selection from the original table
dt << clear select;
Jim