Mehrere Spalten einzeln multiplizierenIch habe 20 Spalten mit Daten.Ich muss jede Spalte mit allen anderen Spalten multiplizieren - eine nach der anderen.Zum Beispiel Spalte 2 * Spalte 3; Spalte 2 * Spalte 4; Spalte 2 * Spalte 5 ... Spalte 3 * Spalte 4, Spalte 3 * Spalte 5 ... Gibt es eine einfache Möglichkeit, dies mit JMP zu tun?
Vielen Dank für Ihre Hilfe,
Jess
Re: Mehrere Spalten einzeln multiplizierenSie können die Kombinationen der Spalten mit nchoosekmatrix() erhalten.Wenn Sie nur die Zahlenmatrix wollen (aus welchen Gründen auch immer), können Sie dies ziemlich schnell tun.
Names Default to Here( 1 );
dt = new table("Test",
add rows(20),
New Column("C", <<SET each="" value=""> 14,
dt << Delete Column(15::ncols(dt));
);
cols_to_multiply = 2::14;
n = nitems(cols_to_multiply);
nck_mat = nchoosekmatrix(n, 2); // this only picks 2 of each combination
// if you just want a matrix
st = HPTime();
dt_mat = dt[0, cols_to_multiply]; //get the values as a matrix
big_mat = dt_mat[0, nck_mat]; // get the combinations of dt values
m_mat = shape(big_mat, nitems(big_mat)/2); // have to shape this to only 2 columns so you can multiply accross
m_mat = shape(m_mat[0, 1] :*</img> m_mat[0, 2], 20); // multiply together then reshape to n rows
tot_mat = HPTime() - st;
//turning it into a data table
st = HPTIme();
nck_cols = shape(cols_to_multiply[nck_mat], nrows(nck_mat), 2);// to get the column names
for(i=1, i<=ncols(m_mat), i++,
col_name = (Column(dt, nck_cols[i, 1]) << Get Name()) || " * " || (Column(dt, nck_cols[i, 2])<< Get name());
New Column(col_name, <<SET values=""></SET></SET>Re: Mehrere Spalten einzeln multiplizierenHallo @Jess ,
Mir ist keine interaktiv verfügbare paarweise Multiplikation dieser Art bekannt, aber es kann mit einem einfachen Skript durchgeführt werden. Haben Sie überhaupt mit JSL gearbeitet? Im Folgenden finden Sie einen Ansatz, mit dem Sie die Spaltennummer angeben können, mit der beginnen und enden sollen, und das Skript kümmert sich um die Erstellung der paarweisen Produktspalten. Wenn Sie JSL noch nie verwendet haben, lassen Sie es mich wissen, ich gehe gerne ein bisschen mehr auf die Details ein.
dt = Open( "$SAMPLE_DATA\US Demographics.jmp" );
startCol = 5;
endCol = 14;
For( i = startCol, i <= endCol - 1, i++,
For( j = i + 1, j <= endCol, j++,
colName = Eval( :Column( i ) << Get Name ) || " * " || Eval( :Column( j ) << Get Name );
New Column( colName, seteachvalue( :Column( i )[] * :Column( j )[] ) );
)
);
Ich hoffe das hilft!
@julianisch