I'm trying to write a script comparing rows by group but am having trouble figuring out how to do this In the table below, I'm trying to select rows that meet both of the following conditions within a group (i.e. by "Subject Number" column):
Basically I'm trying to compare rows within a group with another row within the same group and do this for the entire table. Does anyone know how I can do this?
Not sure I have understood what you are looking for.
Can 'Target # Days from Previous' be an integer less than zero? If not, then don't all rows for a given subject apart from one satisfy your first condition?
Maybe you can post a table with the three columns you need to manipulate (Subject, Target and Visit Sequence? Use the 'Advanced Editor' then 'Attach'.
Here is a script that does what you are asking for. I tested it on the small snippet of data you provided, and it appears to accomplish what you want.
Names Default To Here( 1 );
dt = Current Data Table();
// Create a New column to track found groups
dt << New Column( "Grouping", set each value( . ) );
countGroup = 0;
// Step through all data
For( i = 1, i <= N Rows( dt ) - 1, i++,
// Look ahead to see if triger criteria has been met
// and if it has, then read backwards until it fails
If( dt:Name( "Target # Days from Previous" ) > dt:Name( "Target # Days from Previous" )[i + 1] & dt:Visit Sequence < dt :Visit Sequence[i + 1],
// Trigger has been found, so read backwards until not true
compareStart = i;
While( dt:Name( "Target # Days from Previous" )[compareStart] > dt:Name( "Target # Days from Previous" )[i + 1] & dt:Visit Sequence[ compareStart] < dt:Visit Sequence[i + 1],
dt:Grouping[compareStart] = countGroup;
Selected( Row State( compareStart ) ) = 1;