for 루프를 사용하지 않고 목록의 목록을 바꾸십시오 (summarize ()).누구든지 다음 스크립트에서 오는 것과 같은 목록의 목록을 조 변경하여 각 행이 열 대신 함께 그룹화되도록하는 방법을 생각해 낼 수 있습니다.
나는 for 루프로 할 수 있다는 것을 알고 있지만, 무언가 더 좋거나 적은 것이 있는지 궁금해하고있다.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize(dt, d = By(:age, :sex));
rows = nitems(d);
cols = nitems(d[1]);
show(rows, cols);
// rows = 2;
// cols = 12;
이를 위해 2 개의 12 개 목록에서 12 개 목록으로 변경하고 싶습니다.
이 도전을 좋아하거나 이미 뭔가를 가지고 있다고 생각하는 소수의 사람들을 추가하십시오.
@pmroz , @Justin_Chilton , @ gzmorgan0 , @msharp , @ms
다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기반복 : MS 반복 솔루션은 매우 좋습니다. 
다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기MS, 반복 soution은 매우 멋지다!
다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
//Since column formulas are by row, it uses a built in For Loop this maintains the table values but requires a table....<BR />//This is not a solution for two generic lists<BR />
dt << New Column( "Age,Sex",
Expression,
"None",
Formula( Eval List( {:age[Empty()], :sex[Empty()]} ) ),
Suppress Eval
);
myList= (Associative Array(Column("Age,Sex")) <<GET keys=""></GET>다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기JMP 14에서 새로운 파이썬 훅을 사용하여 나는 속일 수 있다고 생각했습니다. 그것은 주로 작동합니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Summarize(dt, d = By(:age, :sex));
Python Init();
ml = Python Execute(
{d},
{x, d},
"\[
import numpy as np
x = np.transpose(d) # matrix product
print('x=', x)
]\"
);
Show( x, d );
Python Term();다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기다음은 Repeat ()를 기반으로 한 아이디어입니다. 본질적으로 루프이지만 할당을 반복 할 필요없이 목록을 직접 반환하는 함수입니다.
이전 버전의 JMP에서는 Repeat ()가 For ()보다 훨씬 빠르지 만 JMP 13에서는 "고정"된 것으로 생각됩니다.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Summarize(dt, d = By(:age, :sex));
transposed_d = Local({i = 0}, Repeat({i++ ; Eval List({d[1][i], d[2][i]})}, N Items(d[1])));
다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기나는이 방법을 발견했다. 그러나 그것은 더 천천히한다. 
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp")
summarize(dt, list = By(:age, :sex));
rows = nitems(list[1]);
cols = nitems(list);
list_flat = parse("{"||substitute(char(list), "}", "", "{", "")||"}");
insert into(list_flat, repeat({"@@@"}, rows));
list_sort = list_flat[ shape(1::rows*(cols+1), cols+1)` ];
remove from(list_sort, -1);
t_list = parse("{"||
substitute(char(list_sort),
", \!"@@@\!",", "},{"
)
||"}");
다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기PMROZ의 중첩 된 루프가 아마도 최고입니다. 대안을 찾고 있다면 두 가지 다른 방법을 생각해 볼 수 있습니다.
데이터가 모두 숫자 인 경우 꽤 매끄러운 행렬을 사용할 수 있습니다. 그러나 for 루프는 없지만 summarize에서 반환 된 목록의 목록은 숫자 열의 경우에도 모든 문자 값을 반환합니다. 즉, 모든 것을 숫자로 변환하기 위해 중첩 된 for 루프가 필요하다 (모든 데이터가 열이면). 그러면 문제에 도움이되지 않습니다.
두 번째 옵션은 목록을 데이터 표로 변환하고 조 변경 한 다음 되돌릴 수 있습니다. 변환을 위해 두 개의 for 루프가 필요합니다 (중첩 목록과 데이터 표 사이를 전환하는 매끄러운 방법을 알지 못합니다). 데이터 테이블을 만드는 데 오버 헤드가 있기 때문에 PMROZ의 솔루션보다 속도가 느릴 수 있지만 대용량 데이터 세트의 경우 더 빠를 수도 있습니다. 실제로 목록으로 다시 변환하지 않고 대신 전치 된 데이터 표를 사용하면 시간을 절약 할 수 있습니다.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize(dt, d = By(:age, :sex));
rows = nitems(d);
cols = nitems(d[1]);
show(rows, cols);
//Turn List of Lists into DT ()
dtLL = New Table("Lists of Lists");
for(i=1,i<=nitems(d),i++,
dtLL << New Column(char(i), Character, Nominal, Values(d[i]));
);
//Transpose DT
cols = dtLL << Get Column Names;
dtT = dtLL << Transpose(columns(cols));
//Turn back into list of lists
trans_list = {};
for(i=2,i<=ncols(dtT),i++,
trans_list[i] = column(dtT,i) <<GET values=""></GET>다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기DOH! 결과를 표에 쓰고, 조판하고, 표에서 목록을 만들 수 있다고 가정합니다. 그래도 거기에 for 루프가있을 수 있습니다. 음 ...
다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기for 루프 부분을 읽지 않은 것 같아요. :피
다시 : for 루프없이 목록 목록 (summarize ()) 바꾸기그것은 금색의 시계가 아니지만 작동합니다.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize(dt, d = By(:age, :sex));
nrows = nitems(d);
ncols = nitems(d[1]);
show(nrows, ncols);
// nrows = 2;
// ncols = 12;
trans_list = {};
for (i = 1, i <= ncols, i++,
one_list = {};
for (k = 1, k <= nrows, k++,
one_list[k] = d[k][i];
);
trans_list[i] = one_list;
);
show(trans_list);
trans_list = {{"12", "F"}, {"12", "M"}, {"13", "F"}, {"13", "M"}, {"14", "F"}, {"14", "M"}, {"15", "F"}, {"15", "M"}, {"16", "F"}, {"16", "M"}, {"17", "F"}, {"17", "M"}};Re : for 루프없이 목록 목록 (summarize ())을 바꿉니다.나는 똑같은 질문을했다 안녕하세요. . 질문 주셔서 감사합니다. 다음 버전의 JMP에 추가 할 이와 같은 기능에 대한 요청을 게시했습니다. 보자 ...
https://community.jmp.com/t5/JMP-Wish-List/Transpose-List-of-Lists-without-a-for-loop/idi-p/348968