cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • Instantly extract effect sizes, F-ratios, and FDR-adjusted p-values from your models with the Calculate Effects Sizes extension, available now in the JMP Marketplace!
  • New to JMP? Join us Sept. 23-24 for the Early User Edition of Discovery Summit, tailor-made for new users. Register now for free!
  • See how to use the JMP Marketplace – Free tools to expand JMP capabilities. Register. July 10, 2 pm US Eastern Time.

Discussions

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

How to get entire row values using JSL?

HI All,

how we can get intire row values using jsl for a given row?

1 ACCEPTED SOLUTION

Accepted Solutions
Craige_Hales
Super User

Re: How to get entire row values using JSL?

In JMP 13 you can use data table subscripting

dt = Open( "$sample_data/big class.jmp" );
row5 = dt[5, 0];
Show( row5 );

row5 = {"LILLIE", 12, "F", 52, 64};

Craige

View solution in original post

5 REPLIES 5
ian_jmp
Level X

Re: How to get entire row values using JSL?

If you only have numeric columns, you could exploit 'GetAsMatrix'. If you have character and numeric columns, you could use 'GetAllColumnsAsMatrix', but then you still have to handle the coded character values. So, in the latter case, it might be simpler to just define a function:

NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");

getRow =
Function({tbl, rn}, {DefaultLocal},
	rowContents = {};
	for(c=1, c<=NCols(dt), c++,
		InsertInto(rowContents, Column(tbl, c)[rn]);
	);
	rowContents;
);

Print(getRow(dt, 5));

 

Craige_Hales
Super User

Re: How to get entire row values using JSL?

In JMP 13 you can use data table subscripting

dt = Open( "$sample_data/big class.jmp" );
row5 = dt[5, 0];
Show( row5 );

row5 = {"LILLIE", 12, "F", 52, 64};

Craige
ian_jmp
Level X

Re: How to get entire row values using JSL?

Nice!

Note how data table subscripting gives either a list or matrix, as needed:

NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << colorByColumn(:sex);
r4Vals = dt[4,0];
Print(r4Vals);
dt << deleteColumns({:name, :sex});
r4Vals = dt[4,0];
Print(r4Vals);
rsc = dt << NewColumn("Row States", Row State);
rsc << copyFromRowStates;
r4Vals = dt[4,0];
Print(r4Vals);
dt << NewColumn("Expression", Expression);
r4Vals = dt[4,0];
Print(r4Vals);
aronwilson
Level II

Re: How to get entire row values using JSL?

Subscripting data tables is very handy but is it possible to use the "by" function in this (for example by( :age )) to pull all the names of people who have the same age into the column?

 

Here is an example:

I'd like to take all the names where the age is the same and concatenate them in a column.

One of the common next steps is then summarizing other columns by those concatenated names.

 

2018-05-02_3-59-31.png2018-05-02_4-01-21.png

I've dug through and tried multiple approaches and I think I'm just missing something simple, but what I'm hoping is that there is a very straightforward way to do this using either subscription or something like
dt:name << get values(by(age)) and then either put that in a column or use it in a script.

 

I tried this as a formula column: 

dt[Index( :first_row, :last_row ), {:name}]

 

And each subexpression provided the correct result to match your example 

 

// fetch a list if character columns are involved. 
// notice the matrix is reversing the order
dt[ 4::2, "name"]; // {"JACLYN", "JANE", "LOUISE"}

but I'm not able to get the actual list of names {"JACLYN", "JANE", "LOUISE"} to return in the column.

  

Thank you for any help,

 

Aron

aronwilson
Level II

Re: How to get entire row values using JSL?

Apparently, all I needed to do was post and I instantly found an answer.

 

fr = Col Minimum( Row(), :age );
lr = Col Maximum( Row(), :age );
dt:name[Index( fr, lr )];
//returns {"KATIE", "LOUISE", "JANE", "JACLYN", "LILLIE", "TIM", "JAMES", "ROBERT"}

This is exactly what I was looking for.

Using the col min and max with row is pretty simple, so that works.

However, I am curious if it's possible to use a by(age) argument in the subscript directly, I've used it in Make Validation Column and it makes it so much easier to do.

 

Thank you,

 

Aron

Recommended Articles