The If() function evaluates the first result expression when its condition evaluates as true (a nonzero or nonmissing value). Otherwise, it evaluates the second result expression.
If ( condition, result1, result2 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each Row( age = If( :age < 12, "Young", "Young at Heart" ) );
If( condition1, result1,
	condition2, result2,
	...,
	resultElse );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For Each Row( sex =
	If(
		sex == "F", "Female",
		sex == "M", "Male",
		"Unknown" );
);
For Each Row( sex =
For each row in the table, sex is the column that is recoded.
If(
Begins the If() loop.
	sex == "F", "Female",
If the value of sex is F, replaces the value with Female.
	sex == "M", "Male",
If the value of sex is M, replaces the value with Male.
	"Unknown" );
);
y = 25;
z = If( y < 20, x = y, x = 20 );
Note: Be careful to use two equal signs (==) for equality tests, not one equal sign (=). An If with an argument such as name=value assigns rather than tests the value.
If( val, If( val, If( val, If( val, If( val,
If( val, If( val, If( val, If( val, If( val,
...
) ) ) ) ) ) ) ) ) );
If( val, val1, If(val, val2, If( val, val3,
If( val, val4, If( val, val5, If( val, val6, ...) ) ) ) ) );
You can also try setting the maximum call depth. The Maximum Call Depth preference sets the default for the maximum call depth (or stack size) in which JSL built-in functions, user-defined functions, or Recurse() function calls can be made. By default, the maximum call depth is set to 256.
Preferences[1] << Set( Maximum JMP call depth( 50 ) );

Help created on 7/12/2018