문자 열의 Col Min () 및 Col Max ()Col Min () / Col Max ()가하는 일과 비슷하게 동작하는 함수에 관심이 있습니다. 그러나 숫자 형 컬럼을 조작하는 대신 Character 컬럼을 조작 할 수 있습니다. 예 :
- "Col Min Str (: 데이터, : 그룹화)"는 데이터를 그룹화하여 그룹화 한 첫 번째 항목을 알파벳순으로 반환합니다.
- "Col Max Str (: 데이터, : 그룹화)"는 알파벳 순으로 마지막 항목을 다음과 같이 반환합니다. 데이터 : 그룹화 기준 : 그룹화.
아이디어?
다시 : Col Min () & Col Max () (문자 열) @john_madden , 당신의 회신은 나를 Eval (Parse ()) 메서드를 사용하는 것에 대해 시작하게했다. 그것은 강력하지만 혼란스런 방법론입니다. 그래서 다시 한 번 코드를 살펴 보았습니다. 그리고 As Column () 함수를 사용하여 전체 Eval (Parse ())을 제거 할 수 있습니다.
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
dt << New Column( "Max Name by Sex",
Character,
Nominal,
Formula(
Col Max Str = Function( {data, by},
dt = Current Data Table();
testBy = Column( dt, by )[Row()];
rr = dt << get rows where( as column(dt, by) == testBy );
myList = As List( Column( dt, data )[rr] );
myList = Sort List( myList );
myList[N Items( myList )];
);
result = Col Max Str( "Name", "Sex" );
)
);다시 : Col Min () & Col Max () (문자 열)Eval (Parse ()) 방법론을 사용하면 단순히 JSL 문을 리터럴 문자열로 작성한 다음 실행할 수 있습니다. 나는 JMP가 문장을 적절히 해석하지 않을 때 이것을 사용한다. 나는 처음에이 형태로 문제의 진술을 시도했다.
rr = dt << get rows where( Column( dt, by ) == testBy );
JMP는 이것을 좋아하지 않았습니다 ..... 아니면 오히려 JMP는 내가 생각한대로 이것을 해석하지 않았습니다. 진술서가 명시적인 형식으로 작성 되었다면 진술서가 작동했습니다.
rr = dt << get rows where( :sex == "F" );
따라서 특정 라인을 리터럴 문자열로 생성하고 Eval (Parse ()) 결합 함수를 사용하여 원하는 코드의 정확한 명시적인 형식을 생성 한 다음 실행합니다
Eval(Parse(
"rr = dt << get rows where( :" || by || " == \!"" || testBy ||"\!" );"
)
);
다시 : Col Min () & Col Max () (문자 열)짐,
고마워, 이건 제대로 작동하는 것 같다. 그것은 내 문제를 해결합니다.
그러나 당신은 약간에 대해서 말할 수 있습니까? 방법 작동합니까? 흥미로워 보이고 스타일에 익숙하지 않습니다. 특히 Eval (Parse ...) 절이 무엇을하고 있는지 잘 알고 있습니다.
존경하는 환호
다시 : Col Min () & Col Max () (문자 열)나는 이것이 당신이 원하는 것을 제공한다고 생각합니다.
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
dt << New Column( "Max Name by Sex",
Character,
Nominal,
Formula(
Col Max Str = Function( {data, by},
dt = Current Data Table();
testBy = Column( dt, by )[Row()];
Eval(
Parse(
"rr = dt << get rows where( :" || by || " == \!"" || testBy ||
"\!" );"
)
);
myList = As List( Column( dt, data )[rr] );
myList = Sort List( myList );
myList[N Items( myList )];
);
result = Col Max Str( "Name", "Sex" );
)
);
dt << New Column( "Min Name by Sex",
Character,
"Nominal",
Formula(
Col Min Str = Function( {data, by},
dt = Current Data Table();
testBy = Column( dt, by )[Row()];
Eval(
Parse(
"rr = dt << get rows where( :" || by || " == \!"" || testBy ||
"\!" );"
)
);
myList = As List( Column( dt, data )[rr] );
myList = Sort List( myList );
myList[1];
);
result = Col Min Str( "Name", "Sex" );
)
);다시 : Col Min () & Col Max () (문자 열)짐,
이 jsl이 더 일반적 일 수 있습니까?
예를 들어 아래 표
왜 시도
1A
2C
2D
B 3B
B 2F
C 1S
C 1W
C 1R
시도 당 최대 "이유"를 얻고 싶습니다.
2D
B 3B
C 1W
다시 : Col Min () & Col Max () (문자 열)Col Max Str () 함수는 일반적입니다. 그것은 전달되는 문자 데이터에 상관없이 작동합니다. 아래는 샘플 데이터 테이블에서의 사용법입니다.
names default to here(1);
dt=New Table( "Untitled 2",
Add Rows( 8 ),
New Column( "Try",
Character,
"Nominal",
Set Values( {"A", "A", "A", "B", "B", "C", "C", "C"} )
),
New Column( "Why",
Character,
"Nominal",
Set Values( {"1A", "2C", "2D", "3B", "2F", "1S", "1W", "1R"} )
)
);
dt << New Column( "Max Why by Try",
Character,
Nominal,
Formula(
Col Max Str = Function( {data, by},
dt = Current Data Table();
testBy = Column( dt, by )[Row()];
rr = dt << get rows where( as column(dt, by) == testBy );
myList = As List( Column( dt, data )[rr] );
myList = Sort List( myList );
myList[N Items( myList )];
);
result = Col Max Str( "Why", "try" );
)
);다시 : Col Min () & Col Max () (문자 열)제가 좋아하는 수학 속성 중 하나를 사용하는 또 다른 해결책이 있습니다.
Names default to here(1);
dt = open("$SAMPLE_DATA\Big Class.jmp");
l = :name << Get Values;
r = rank(l);
rr = rank(r);
dt << new Column("Order", <<SET values=""></SET>
작동 방식은 모두 순위에 기반합니다.
목록의 순위는 원래 목록을 부분 집합 화하여 순서 목록을 얻는 데 필요한 순서를 제공합니다.
l = {"B", "D", "C", "A"};
r = rank(l);
// r = [4, 1, 3, 2]
// l[r] = {"A", "B", "C", "D"}
시원한 생각은 당신이 순위 ()의 순위 () 탱크에 정렬 된 목록을 아래 첨자로 사용할 때 원래의 목록으로 다시 가져 오는 데 필요한 순서를 줄 것입니다.
rr = rank(r);
// rr = [2, 4, 3, 1]
// l[r][rr] = {"B", "D", "C", "A"}
희망이 작동합니다.
다시 : Col Min () & Col Max () (문자 열)두 응답자 - 감사합니다.이 솔루션의 유효성을 검사하고 답장을 보내 드리겠습니다.
그것이 ~ 70k 행과 얼마나 오랫동안 작동 할 수 있다면 질문은 무엇입니까?
BTW, AWS 인스턴스에서 매우 강력한 (RAM, SSD) 시스템을 사용하고 있습니다 ...