cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Don’t miss your chance to experience Discovery Summit Europe at our best available rate! Early bird registration through 31 Oct.
  • Graph Builder Toolbar streamlines interactive graphing. Creates shortcuts on Report and GraphBuilder Helpers toolbars. Download and install the extension.
  • JMP will suspend normal business operations for our Rest and Recharge Day on Friday, October 2, 2026.
    Regular business hours will resume on Monday, October 5, 2026.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
B1234
Level III

Generating Random Letters

Hi, 

I have a script that opens data set where I have a list of "Operator". I have to manually assign each person a random letter in the "Analyst"  but wondering if there is a  code that could loop though all the different operators and assign a random letter to the analyst column?

B1234_0-1653378889551.png

 

Thanks!

2 ACCEPTED SOLUTIONS

Accepted Solutions
ian_jmp
Level X

Re: Generating Random Letters

Here's one way. Note that 'RandomShuffle()' assures you don't assign the same letter more than once (which I assume is what you need):

NamesDefaultToHere(1);

// List of possible values
letterList = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

// Number of rows in data table
n = 10;

// Values to assign to new character column
colVals = letterList[RandomShuffle(1::n)];

Print(colVals);

 

View solution in original post

jthi
Super User

Re: Generating Random Letters

One option would be to use associative array in combination with @ian_jmp solution. Something like this could work:

Names Default To Here(1);

dt = New Table("test",
	addrows(100),
	New Column("Operator", character, set values({"ABC", "ABC", "DEF", "GHI"}));
);

// List of possible values
letterList = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

uniq_oper = Associative Array(dt:Operator) << get keys;
Remove From(uniq_oper, Contains(uniq_oper, "")); // remove missing
uniq_oper_letter = letterList[Random Shuffle(1::N Items(letterList))][1::N Items(uniq_oper)];

oper_aa = Associative Array(uniq_oper, uniq_oper_letter);

dt << New Column("Analyst", character, << Set Each Value(
	If(Contains(oper_aa, :Operator),
		oper_aa[:Operator]
	,
		""
	)
));
-Jarmo

View solution in original post

4 REPLIES 4
ian_jmp
Level X

Re: Generating Random Letters

Here's one way. Note that 'RandomShuffle()' assures you don't assign the same letter more than once (which I assume is what you need):

NamesDefaultToHere(1);

// List of possible values
letterList = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

// Number of rows in data table
n = 10;

// Values to assign to new character column
colVals = letterList[RandomShuffle(1::n)];

Print(colVals);

 

B1234
Level III

Re: Generating Random Letters

Thanks, how do I account for the same operator name. I would have multiple rows where initials are "ABC" so I want all of these to be the same random letter?

 

NamesDefaultToHere(1);

dt=new table();
dt<<addrows(100);
dt<<new column("Operator", character, set values ({"ABC", "ABC", "DEF", "GHI"}));


// List of possible values
letterList = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

// Number of rows in data table
n = 10;

// Values to assign to new character column
colVals = letterList[RandomShuffle(1::n)];

Print(colVals);

dt<<new column ("Analyst", character,set values(colVals));

jthi
Super User

Re: Generating Random Letters

One option would be to use associative array in combination with @ian_jmp solution. Something like this could work:

Names Default To Here(1);

dt = New Table("test",
	addrows(100),
	New Column("Operator", character, set values({"ABC", "ABC", "DEF", "GHI"}));
);

// List of possible values
letterList = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

uniq_oper = Associative Array(dt:Operator) << get keys;
Remove From(uniq_oper, Contains(uniq_oper, "")); // remove missing
uniq_oper_letter = letterList[Random Shuffle(1::N Items(letterList))][1::N Items(uniq_oper)];

oper_aa = Associative Array(uniq_oper, uniq_oper_letter);

dt << New Column("Analyst", character, << Set Each Value(
	If(Contains(oper_aa, :Operator),
		oper_aa[:Operator]
	,
		""
	)
));
-Jarmo
B1234
Level III

Re: Generating Random Letters

@ian_jmp and @jthi  you both make this seem so easy! thank you both for your help :D

Recommended Articles