How do I apply a mathmatical formula to selected rows only using JSL? Thanks for your help.
Here is an example of my interpretation of what you want to do.
The last column uses a column formula. The formula implements the conditional computation.
Row states are a vital part of how JMP operates. This code is equivalent but without installing a column formula.
Names Default To Here( 1 ); col = Current Data Table() << New Column( "Conditional BMI" ); For Each Row( col[] = If( Selected( Row State( Row() ) ), (703 * :weight) / :height ^ 2 ) );
You did not mention if you just want the value or you wanted this to be another column formula. If it is s column formula you need to provide more information. Here is an exampe with a computation using only 2 of 6 rows.
Names Default to Here(1); dt = new Table("Test", Add Rows(6), New Column("Values", numeric, continuous, Set Values(J(6,1, Random Integer(1,20))) ) ); mysum = :Values[2]^2 + :Values[4]^2 - 4 * :Values[2]*:Values[4] ; show(mysum );
Here is an example that shows how to deal exclusively with selected rows
Names Default To Here( 1 ); dt = Open( "$SAMPLE_DATA/big class.jmp" ); // pause to show the original data table wait(5); // select some rows dt << select where( :sex == "F" ); For( i = 1, i <= N Rows( dt << get selected rows ), i++, dt:age[i] = dt:age[i] - 2 ); dt:weight[dt<<get selected rows] = 100;
I have similar situation with a data table. My goal is to convert all of the values in the "Values" column from Fahrenheit to Celsius. The script I am using to do this is:
For Each Row(If(:Unit=="°F", Selected(RowState())=1)); For Each Row(:Value = If(Selected(RowState(Row())), Conversions:Farenheit To Celsius(:Value)));
The script does what I need it to do in terms of the conversion however, all of the values that are not associated with the unit °F are removed. Is there a script that can be added to ignore the unselected columns and ultimately keep the values that are not associated with the unit °F?
I wouldn't really suggest directly converting the value of Value field because unless you also change the Unit column to Celsius.
You can use set each value with if-statement to replace values in column. In else part "return" same value there is currently. Something like this should work:
:Value << Set Each Value( If(:Unit=="°F" /*& Selected()*/, Conversions:Farenheit To Celsius(:Value) , //else keep value :Value ); )