cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.
Choose Language Hide Translation Bar
View Original Published Thread

How to randomly assign one value to three unique IDs, while having each ID assigned 6 unique values?

WetlandWoman
Level II

Hi,

I am attempting to assign a list of video clips to a list of reviewers. Both the reviewers and the video clips have unique IDs. For increased accuracy, I would like three different reviewers to view the same video clip. And each reviewer must review 6 different video clips. The list of reviewer IDs and Video Clip IDs are in separate JMP files. I am currently using JMP v.16.2.0, and I have attached a JMP table illustrating the assignment process for two video clips and 6 reviewers.

Thank you in advance for your help!

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User


Re: How to randomly assign one value to three unique IDs, while having each ID assigned 6 unique values?

Here is a rough attempt at what you are asking for.  I think it will work.  I assume, others in the Community will have a better idea  It uses 2 sample data tables, and assigns the clips to review from them

Names Default To Here( 1 );

dtRev = New Table( "Reviewers",
	New Column( "Reviewer", character, values( {"400180174", "400197965", "400241556", "400244169", "400247301", "400258583"} ) )
);
dtClp = New Table( "Clips",
	New Column( "Clip",
		character,
		values(
			{"GI2C328162023S24", "SQBC107132043S11", "SQBC107132023S11", "GI2C318162023S24", 
			"GI2C308162023S24", "SQBC107133023S11","GI2C308162022S25", "SQBC107132022S12", 
			"SQBC107132022S13", "GI2C309162032S24", "GI2C308162022S27", "SQBC107132022S16"}
		)
	)
);

// Create a new reviewers data table with each reviewer having 6 entries
dtRev6 = dtRev << concatenate( dtRev, dtRev, dtRev,dtRev,dtRev );
// Randomize the order of reviewer
dtRev6 << New Column( "random", set each value( Random Uniform( 1, 1000000 ) ) );
dtRev6 << Sort( By( :random ), Replace Table, Order( Ascending ) );
dtRev6 << delete columns( random );
// Scan through data table making sure the same name does not appear within 3 of the previous 
// time it appeared
For( i = 6, i <= N Rows( dtRev6 ), i++,
	If( :Reviewer[i] == :Reviewer[i - 1] | Try( :Reviewer[i] == :Reviewer[i - 2], 0 ),
		For( k = i + 1, k <= N Rows( dtRev6 ), k++,
			If( :Reviewer[k] != :Reviewer[i] & :Reviewer[k] != :Reviewer[i - 1] & Try( :Reviewer[k] != :Reviewer[i - 1], 1 ),
				hold = :Reviewer[i];
				:Reviewer[i] = :Reviewer[k];
				:Reviewer[k] = hold;
				Break();
			)
		)
	)
);

// Assign clips
dtRev6 << New Column( "Clip", character );
For( i = 1, i <= nrows(dtClp), i++,
	If( (i-1) * 3 +1 <= N Rows( dtRev6 ),
		For( k = (i-1) * 3 +1, k <= (i-1) * 3 +3, k++,
			dtRev6:Clip[k] = dtClp:Clip[i];
		)
	)
);

// Sort the table so reviewer's clips are listed together
dtRev6 << Sort(
	By( :Reviewer ),
	Replace Table,
	Order( Ascending )
);
Jim

View solution in original post

4 REPLIES 4
txnelson
Super User


Re: How to randomly assign one value to three unique IDs, while having each ID assigned 6 unique values?

Here is a rough attempt at what you are asking for.  I think it will work.  I assume, others in the Community will have a better idea  It uses 2 sample data tables, and assigns the clips to review from them

Names Default To Here( 1 );

dtRev = New Table( "Reviewers",
	New Column( "Reviewer", character, values( {"400180174", "400197965", "400241556", "400244169", "400247301", "400258583"} ) )
);
dtClp = New Table( "Clips",
	New Column( "Clip",
		character,
		values(
			{"GI2C328162023S24", "SQBC107132043S11", "SQBC107132023S11", "GI2C318162023S24", 
			"GI2C308162023S24", "SQBC107133023S11","GI2C308162022S25", "SQBC107132022S12", 
			"SQBC107132022S13", "GI2C309162032S24", "GI2C308162022S27", "SQBC107132022S16"}
		)
	)
);

// Create a new reviewers data table with each reviewer having 6 entries
dtRev6 = dtRev << concatenate( dtRev, dtRev, dtRev,dtRev,dtRev );
// Randomize the order of reviewer
dtRev6 << New Column( "random", set each value( Random Uniform( 1, 1000000 ) ) );
dtRev6 << Sort( By( :random ), Replace Table, Order( Ascending ) );
dtRev6 << delete columns( random );
// Scan through data table making sure the same name does not appear within 3 of the previous 
// time it appeared
For( i = 6, i <= N Rows( dtRev6 ), i++,
	If( :Reviewer[i] == :Reviewer[i - 1] | Try( :Reviewer[i] == :Reviewer[i - 2], 0 ),
		For( k = i + 1, k <= N Rows( dtRev6 ), k++,
			If( :Reviewer[k] != :Reviewer[i] & :Reviewer[k] != :Reviewer[i - 1] & Try( :Reviewer[k] != :Reviewer[i - 1], 1 ),
				hold = :Reviewer[i];
				:Reviewer[i] = :Reviewer[k];
				:Reviewer[k] = hold;
				Break();
			)
		)
	)
);

// Assign clips
dtRev6 << New Column( "Clip", character );
For( i = 1, i <= nrows(dtClp), i++,
	If( (i-1) * 3 +1 <= N Rows( dtRev6 ),
		For( k = (i-1) * 3 +1, k <= (i-1) * 3 +3, k++,
			dtRev6:Clip[k] = dtClp:Clip[i];
		)
	)
);

// Sort the table so reviewer's clips are listed together
dtRev6 << Sort(
	By( :Reviewer ),
	Replace Table,
	Order( Ascending )
);
Jim
WetlandWoman
Level II


Re: How to randomly assign one value to three unique IDs, while having each ID assigned 6 unique values?

Hi Jim, Thank you for this! It worked like a dream.

Cheers!


Re: How to randomly assign one value to three unique IDs, while having each ID assigned 6 unique values?

I used a Custom Design. I defined a categorical factor Clip with 12 levels. I created a fixed blocking factor Reviewer with 6 runs per block. (You can assign the reviewer ID with the Value Labels column property.) The definitions look like this:

 

custom.PNG

 

I chose 36 runs to achieve all combinations with random assignment using D-optimality. I checked and the design is balanced, which ensures that every reviewer gets 6 clips and every clip gets 3 reviews.

 

dist.PNG

WetlandWoman
Level II


Re: How to randomly assign one value to three unique IDs, while having each ID assigned 6 unique values?

Hi Mark,

Thank you for this. I have never used Custom Design so I stuck with what I knew, but this could come in handy for the future