BookmarkSubscribeRSS Feed
Choose Language Hide Translation Bar
Highlighted
lwx228

Regular Contributor

Joined:

Aug 14, 2018

How to use function to find the first position greater than the specified starting position?

Use the function to find the first position of the weight column in the top 5 rows greater than 120.

Excuse me, Thanks!

 

2019-03-09_15-53-29.png

2 ACCEPTED SOLUTIONS

Accepted Solutions
txnelson

Super User

Joined:

Jun 22, 2012

Solution

Re: How to use function to find the first position greater than the specified starting position?

Here is one way to do it

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );

dt << New Column( "match",
	formula(
		value = .;
		If( Row() > 5,
			count = 0;
			For( i = Row() - 5, i <= Row() - 1, i++,
				count++;
				If( :weight[i] > 120,
					value = count;
					Break();
				);
			);
		);
		value;
	)
);


 

 

Jim
ms

Super User

Joined:

Jun 23, 2011

Solution

Re: How to use function to find the first position greater than the specified starting position?

The JSL function that here corresponds to Excel's Match() would be Loc(). However, Loc() returns a matrix with the position of all matches, not just the first (or last).

 

Example:

dt << New Column("match",
    formula(If(Row() > 4, Loc(:weight[Row() - 4 :: Row()] > 120)[1]))
);

 

 

3 REPLIES 3
txnelson

Super User

Joined:

Jun 22, 2012

Solution

Re: How to use function to find the first position greater than the specified starting position?

Here is one way to do it

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );

dt << New Column( "match",
	formula(
		value = .;
		If( Row() > 5,
			count = 0;
			For( i = Row() - 5, i <= Row() - 1, i++,
				count++;
				If( :weight[i] > 120,
					value = count;
					Break();
				);
			);
		);
		value;
	)
);


 

 

Jim
lwx228

Regular Contributor

Joined:

Aug 14, 2018

Re: How to use function to find the first position greater than the specified starting position?

It seems to me that this kind of calculation is needed by fewer people.

Thank Jim!
This calculation can be done in excel using a simple array formula.
{=MATCH(,IF(E2:E6>120,),)}
ms

Super User

Joined:

Jun 23, 2011

Solution

Re: How to use function to find the first position greater than the specified starting position?

The JSL function that here corresponds to Excel's Match() would be Loc(). However, Loc() returns a matrix with the position of all matches, not just the first (or last).

 

Example:

dt << New Column("match",
    formula(If(Row() > 4, Loc(:weight[Row() - 4 :: Row()] > 120)[1]))
);