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
Abby_Collins14
Level III

using for loop to find minimum values and saving results in a list

I have three lists of numbers:

 

a= {2,3,4,5,6}

b = {4,5,7,2,1}

c= {9,6,4,6,2}

I would like to take the minimum of each index from the 3 lists and turn that into a list, say d. so d = {2,3,4,2,1}.

the loop i have started is:

 

minsl = {};

for(i = 1, i = 6, i++,

mins = {a[i], b[i], c[i]};


minval = minimum(mins);


minsl=insert into(minsl,minval,i);
If(n items(minsl)==5, break()); // this line was added to stop the loop because it gets stuck
);

 

the output is minsl = {1,1,1,1,1} i.e. is gets stuck storing the last entry in the list only (and foes on forever without the break line), when it should be {2,3,4,2,1}

 

Any suggestions how to fix?? Thanks!!

 

2 ACCEPTED SOLUTIONS

Accepted Solutions
txnelson
Super User

Re: using for loop to find minimum values and saving results in a list

Your For() loop of 

For( i = 1, i = 5, i++, 

needs to be

For( i = 1, i <= 5, i++, 

Then it seems to work the way you want it to

names default to here( 1 );

a = {2, 3, 4, 5, 6};
b = {4, 5, 7, 2, 1};
c = {9, 6, 4, 6, 2};

minsl = {};

For( i = 1, i <= 5, i++, 
	mins = a[i] || b[i] || c[i];
	minval = Minimum( mins );
	Insert Into( minsl, minval );
);
Jim

View solution in original post

jthi
Super User

Re: using for loop to find minimum values and saving results in a list

You can also use matrices + V Min() for this (remember to comment to code to make it easier to understand if needed)

Names Default To Here(1);

a = {2, 3, 4, 5, 6};
b = {4, 5, 7, 2, 1};
c = {9, 6, 4, 6, 2};

m = Matrix(a)` |/ Matrix(b)` |/ Matrix(c)`;
d = As List(V Min(m)`); // {2, 3, 4, 2, 1}
-Jarmo

View solution in original post

7 REPLIES 7
txnelson
Super User

Re: using for loop to find minimum values and saving results in a list

Here is how I would approach the issue

names default to here(1);
a = {2, 3, 4, 5, 6};
b = {4, 5, 7, 2, 1};
c = {9, 6, 4, 6, 2};

a1= sortlist(a);
remove from(a1,3,n=length(a)-2);
b1= sortlist(b);
remove from(b1,3,n=length(b)-2);
c1= sortlist(c);
remove from(c1,3,n=length(c)-2);

d=a1||b1||c1;

Also, please use the <JSL> icon at the top of the Preview window when entering script code.  It allows for the reader to more easily read the code.

Jim
Abby_Collins14
Level III

Re: using for loop to find minimum values and saving results in a list

thanks! this doesn't seem to preserve the order though. Essentially, I need to pull the minimum value out of the first index of the 3 lists and then store that in a list (preserving order) 

 

a = {2, 3, 4, 5, 6};
b = {4, 5, 7, 2, 1};
c = {9, 6, 4, 6, 2};

minsl = {};

for(i = 1, i = 5, i++,

mins = {a[i],b[i],c[i]};
minval = minimum(mins);
insert into (minsl,minval,i);
If(n items(minsl)==5, break());
);

if you run the above code ignoring the actual loop and do i=1, and then run just the inside of the loop and then put i=2 and run the inside of the loop it works (you'll see minsl = {2,3} )but for some reason the loop doesn't cycle properly and breaks

Abby_Collins14
Level III

Re: using for loop to find minimum values and saving results in a list

a = {2, 3, 4, 5, 6};
b = {4, 5, 7, 2, 1};
c = {9, 6, 4, 6, 2};

minsl = {};

i = 1;

mins = {a[i],b[i],c[i]};
minval = minimum(mins);
insert into (minsl,minval,i);

i=2;

mins = {a[i],b[i],c[i]};
minval = minimum(mins);
insert into (minsl,minval,i);

i = 3;

mins = {a[i],b[i],c[i]};
minval = minimum(mins);
insert into (minsl,minval,i);

i = 4;

mins = {a[i],b[i],c[i]};
minval = minimum(mins);
insert into (minsl,minval,i);


minsl

i.e. the above works, but I would like to get a loop working for when I have lists of much longer lengths 

txnelson
Super User

Re: using for loop to find minimum values and saving results in a list

Your For() loop of 

For( i = 1, i = 5, i++, 

needs to be

For( i = 1, i <= 5, i++, 

Then it seems to work the way you want it to

names default to here( 1 );

a = {2, 3, 4, 5, 6};
b = {4, 5, 7, 2, 1};
c = {9, 6, 4, 6, 2};

minsl = {};

For( i = 1, i <= 5, i++, 
	mins = a[i] || b[i] || c[i];
	minval = Minimum( mins );
	Insert Into( minsl, minval );
);
Jim
Abby_Collins14
Level III

Re: using for loop to find minimum values and saving results in a list

thanks!! :)

jthi
Super User

Re: using for loop to find minimum values and saving results in a list

You can also use matrices + V Min() for this (remember to comment to code to make it easier to understand if needed)

Names Default To Here(1);

a = {2, 3, 4, 5, 6};
b = {4, 5, 7, 2, 1};
c = {9, 6, 4, 6, 2};

m = Matrix(a)` |/ Matrix(b)` |/ Matrix(c)`;
d = As List(V Min(m)`); // {2, 3, 4, 2, 1}
-Jarmo
Abby_Collins14
Level III

Re: using for loop to find minimum values and saving results in a list

didn't think of this, good idea-thanks!

Recommended Articles