여러 열에 하나씩 곱하기데이터 열이 20 개 있습니다. 각 열에 다른 열 모두를 하나씩 곱해야합니다. 예를 들어, 열 2 * 열 3; 칼럼 2 * 칼럼 4; 열 2 * 열 5 ... 열 3 * 열 4, 열 3 * 열 5 ... JMP에서이 작업을 수행하는 쉬운 방법이 있습니까?
당신의 도움을 주셔서 감사합니다,
발목 끈
다시 : 여러 열을 하나씩 곱하기안녕하세요 @발목 끈 ,
나는 그 종류의 어떤 pairwise 곱셈도 대화식으로 사용할 수 있다는 것을 알지 못하지만 간단한 스크립트로 끝낼 수 있습니다. JSL로 일한 적이 있습니까? 아래에서 시작하고 끝나는 열 번호를 지정할 수있는 한 가지 방법이 있으며 스크립트는 쌍별 제품 열을 만드는 일을 처리합니다. 저에게 알려주기 전에 JSL을 사용하지 않으 셨다면, 좀 더 자세히 살펴 보겠습니다.
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 )[] ) );
)
);
이게 도움이 되길 바란다!
@ 율리안
다시 : 여러 열을 하나씩 곱하기nchoosekmatrix ()를 사용하여 열의 조합을 얻을 수 있습니다. 당신이 숫자의 행렬만을 원한다면 (어떤 이유로 든) 당신은 꽤 빨리 그것을 할 수 있습니다.
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>