Subscribe Bookmark RSS Feed

column number

KinKame

Community Trekker

Joined:

Nov 30, 2015

Hi all,

how can I get the column number in a table?

as below header 3 is column # 3 in the table ...

Header 1Header 2Header 3
6 REPLIES
KinKame

Community Trekker

Joined:

Nov 30, 2015

without using a loop for !!!

ms

Super User

Joined:

Jun 23, 2011

Below is an approach using Contains that does what (I think) you're asking for:

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

//Works!

column_nr = Contains(dt << get column names(string), "height");

column_nr = Contains(dt << get column names(), Column("height"));

column_nr = Contains(dt << get column names(), expr(height));


//Works not

column_nr = Contains(dt << get column names(), height);

Nate_Riordan

Staff

Joined:

Sep 10, 2015

I like where you're heading with this MS.  I might start out with a


          dt = Current Data Table();


And if llupo0's question were how many columns are there your could be modified it to look like this:

          number_of_columns = n items( dt << Get Column Names());

If ultimately interested, llupo0 could then refer to the columns by number:

          column3 = column(dt, 3);

     value1_column3 = column3[1];

msharp

Super User

Joined:

Jul 28, 2015

I'm sorry, but this post went from bad coding practices to worse coding practices.  As the saying goes, there are multiple ways to skin a cat, and there are multiple ways to write code to perform the same function.  However, what is the best way?  Generally, we will want to consider at LEAST the three main factors speed, length of code, and error proneness.  For this, reason,


number_of_columns = n items( dt << Get Column Names());

is really poor programming.  What you should use is:

number_of_columns = ncols(dt);

The obvious is it's shorter, but it's also faster.  The former has to create a list of all the column names, and then count them.  The latter will simply grab the table variable.

Next, column3 = column(dt, 3); should never be used.  The first reason is b/c column3 is a poor name.  I'm not going to go into why, but you can read this post for clarification What's in a Name? Anti-Patterns to a Hard Problem.  The second reason, is b/c of the additional step you are introducing. Why do:

column_nr = Contains(dt << get column names(), Column("height"));

column = column(dt, column_nr);

When you could just:

column = Column(dt, "height");

Again, the latter is shorter and faster.

KinKame

Community Trekker

Joined:

Nov 30, 2015

nice ... and yes it works perfectly thank you

msharp

Super User

Joined:

Jul 28, 2015

Could you explain a little on why you want this? 99 times out of a 100, this value is not beneficial and there's a better coding methodology that should be implemented.  This is especially true since to get this number you'd either need to know the Column Reference or Column Name, which are both more valuable.