cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • 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!
  • Your voice matters! Tell us how you prefer to receive JMP updates, so we can tailor our communication to your needs. Take short survey.
  • See how to access JMP Marketplace - and - find, create & share add-ins to extend your JMP. Watch video.

Discussions

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

Simple "Duplicate Column" method

Can anyone think of a simple way of duplicating a selected column in a data table? Basically, I'd like to select the column, and get a "Copy Of" with all the attributes, values, etc. right next to the original, in a single menu item click. Doing it by adding, moving, setting types, copying values etc. is a pain. I suppose it could be scripted as an Add-In but I was hoping that there was a simpler way.

Thanks!

1 ACCEPTED SOLUTION

Accepted Solutions
ms
Super User (Alumni) ms
Super User (Alumni)

Re: Simple "Duplicate Column" method

Try something like this. It supports selection and copying of multiple columns.

Names Default To Here( 1 );

dt = Current Data Table();

cols = dt << get selected columns;

For( i = 1, i <= N Items( cols ), i++,

  dt << clear column selection;

  colscr = cols[i] << getscript;

  (Eval( Substitute( Name Expr( colscr ), Arg( Name Expr( colscr ), 1 ), "Copy of " || (cols[i] << get name) ) )) << set selected( 1 );

  dt << move selected columns( After( cols[i] ) );

);


View solution in original post

3 REPLIES 3

Re: Simple "Duplicate Column" method

So I created this as an Add-In. The bottom part (commented out) was an attempt to copy Column Properties but it didn't work. (This was what I was trying to avoid, but I had a long meeting with nothing better to do...) I'd still be interested if there's something more elegant than this approach.

dt = Current Data Table();

selcol = dt << Get Selected Columns;

selcolname = dt:selcol << Get Name();

newcname = "Copy Of " || selcolname;

newc = dt << New Column( newcname );

newclist = dt:newc << Get Name(); //in case this is a second copy!

movestr = "dt << Move Selected Columns({\!"%newclist%\!"}, After(\!"%selcolname%\!") );";

eval insert into(movestr,"%");

movestrexpr = Parse(movestr);

movestrexpr;

For Each Row(dt:newc = dt:selcol);

/*proplist = dt:selcol << Get Properties List();

for(i=1, i < N Items(proplist), i ++,

    currprop = Char(proplist);

    gotpropstr = "gotprop = dt:selcol << Get Property(\!"%currprop%\!");";

    eval insert into(gotpropstr,"%");

    gotpropstrexpr = Parse(gotpropstr);

    gotpropstrexpr;

    setpropstr = "newc << Eval List(Set Property(\!"%currprop%\!", List(gotprop)));";

    eval insert into(setpropstr,"%");

    setpropstrexpr = Parse(setpropstr);

    setpropstrexpr;

);

newcproplist = dt:newc << Get Properties List();

//Show Properties(dt:selcol);

*/

ms
Super User (Alumni) ms
Super User (Alumni)

Re: Simple "Duplicate Column" method

Try something like this. It supports selection and copying of multiple columns.

Names Default To Here( 1 );

dt = Current Data Table();

cols = dt << get selected columns;

For( i = 1, i <= N Items( cols ), i++,

  dt << clear column selection;

  colscr = cols[i] << getscript;

  (Eval( Substitute( Name Expr( colscr ), Arg( Name Expr( colscr ), 1 ), "Copy of " || (cols[i] << get name) ) )) << set selected( 1 );

  dt << move selected columns( After( cols[i] ) );

);


Re: Simple "Duplicate Column" method

Thanks, getscript is exactly what I was missing in my scripting knowledge!

Recommended Articles