JSL 코드 및 요약 도움말안녕하세요 JMP 커뮤니티,
JMP Pro v17.
저는 지난달에 작동하던 스크립트가 있는데, 더 이상 작동하지 않는 것 같습니다. 저는 한 열의 이름이 :Date인 데이터 테이블이 있습니다(첨부된 데이터 테이블 참조). 다음 스크립트는 :Date의 Year( )로 데이터 테이블을 요약하고 변수 "yrs"에 대한 연도 목록을 생성하도록 되어 있습니다.
Summarize( dt, yrs = By( Year( :Date ) ) );
예를 들어, Year( ) 명령은 :Date 열에서 연도 값만 추출해야 하기 때문에 {"2022", "2023", "2024"} 등과 같은 날짜 목록을 반환해야 하지만, 그렇지 않습니다.
:Date 주변의 Year( ) 명령을 제거하고 다음과 같이 실행하면:
Summarize( dt, yrs = By( :Date ) );
결과는 모든 개별 날짜의 목록입니다. 다음은 발췌 부분입니다.
{"0263/09/29", "1930/01/30", "1955/02/11", "2002/05/03", "2002/08/13", "2002/10/19",
"2021년 1월 1일", "2021년 1월 2일", "2021년 6월 1일", "2021년 1월 18일", "2021년 1월 30일", "2021년 2월 12일",
"2021년 2월 13일", "2021년 2월 15일", "2021년 3월 26일", "2021년 3월 27일", "2021년 3월 28일", "2021년 3월 30일",
"2021년 4월 23일", "2021년 4월 24일", "2021년 4월 25일",}
몇몇 잘못 입력된 날짜가 있지만 지금은 무시해도 됩니다.
사실 저는 모든 개별 날짜를 원하는 것이 아니라 모든 연도의 목록만 원합니다. 불행히도 yr = Year( :Date)를 실행하려고 하면 yr에 대한 null/빈 변수가 나옵니다. 이것은 원래 JSL에서 다음 By( ) 명령으로 평가할 수 없게 됩니다. 필요한지 모르겠습니다.
이상하게 느껴지는 건 한 달 전쯤 이 코드를 작성할 때는 아무 문제 없이 잘 작동하는 듯했는데 지금은 이전처럼 작동하지 않는다는 점입니다.
이 문제를 일으키는 간단한 것을 놓치고 있다는 건 확실하지만, 그것이 무엇인지 알 수가 없습니다. 아니면 Summarize( ) 및/또는 그것이 By( ) 그룹을 사용하는 방식에 대해 생각하고 있습니다.
모든 생각/피드백에 감사드립니다!
디에스
자동화 및 스크립팅대량 맞춤형윈도우Re: JSL 코드 및 요약 도움말안녕,
다음과 같이 연도 함수를 평가해야 합니다.
Eval(Eval Expr(summarize (dt, yr = By(Year(:Date)))));
최상의,
티에스
Re: JSL 코드 및 요약 도움말Summarize를 사용하면 그렇게 할 수 없다고 생각하지만 테이블에 새 열을 만들고 싶지 않으면 변환 열이 있는 Summary를 사용할 수 있습니다.
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
Show(years);
Re: JSL 코드 및 요약 도움말안녕하세요 @Thierry_S 및 @jthi ,
두 분 모두 빠른 피드백과 아이디어에 감사드립니다. 제가 너무 빨리 해결되었다고 표시했을 수도 있지만, 이상한 일이 방금 일어났기 때문입니다.
@Thierry_S 의 Eval(Eval Expr( ))을 요약 명령 주위에 래핑하여 실행해 보았고, 테스트 데이터 테이블(날짜만 있는 테이블)에서 테스트할 때는 작동했지만, 원본 데이터 테이블로 이동하자마자 작동을 멈추고, 다음과 같은 오류가 발생했습니다: 'Year'의 액세스 또는 평가에서 열을 찾을 수 없습니다, Year/*###*/(:Date).
이제 돌아가서 "가짜" 날짜 데이터 테이블에서 이 작업을 시도하면 다시 오류가 발생합니다.
@jthi , 당신의 옵션은 가능성이 있지만, 행렬(또는 1차원 벡터를 숫자 목록으로)에서 바꿔야 할 것 같습니다. 빠르게 할 수 있는 방법이 있나요? 연관 배열에서 연도 목록을 사용하고 있기 때문에 그렇게 해야 합니다.
감사해요!,
디에스
Re: JSL 코드 및 요약 도움말연관 배열의 키는 정수입니까 아니면 문자열입니까? 정수인 경우 As List()를 사용할 수 있습니다.
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(As List(years)); // As List(years) = {263, 1930, 1955, 2002, 2021, 2022, 2023, 2024, 2025};
그리고 문자열인 경우 열을 문자로 변경한 다음 값을 가져옵니다.
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
Column(dt_summary, 1) << Set Data Type("Character");
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(years); // years = {"263", "1930", "1955", "2002", "2021", "2022", "2023", "2024", "2025"};
Re: JSL 코드 및 요약 도움말지난달에 작동했던 스크립트가 있습니다.
아마 기존 기둥 때문일 수도?

Re: JSL 코드 및 요약 도움말요약은 열 변환과 함께 작동합니다.
dt = Open( "$SAMPLE_DATA/Hurricanes.jmp" );
dt << Transform Column( "tmp", Formula( year(:date) ) );
Summarize(years = by (tmp));
//dt << Delete Columns( :tmp );
Show(years)
변환 열을 삭제하는 것을 잊어도 걱정하지 마세요. 다음에 "열기"하면 사라집니다.
Re: JSL 코드 및 요약 도움말안녕하세요 @jthi 님 ,
피드백과 제안에 감사드립니다. 저는 나중에 콤보 상자에서 문자열만 사용하기 때문에 문자열로 연도를 사용해야 합니다.
도움과 문제해결에 감사드립니다!
디에스
Re: JSL 코드 및 요약 도움말안녕하세요 @hogi 님 ,
모든 데이터 테이블의 열 이름은 :Date이고, 모두 숫자형 연속 열이므로 왜 이전에는 작동했고 지금은 작동하지 않는지 잘 모르겠습니다. 그리고 이상한 점은 Hurricanes.jmp 데이터 테이블에서는 작동하지만 제 테이블에서는 작동하지 않는다는 것입니다. 왜 이런 일이 일어나는지 정말 이해할 수 없지만, 발생합니다.
어쨌든, Jarmo가 제안한 방법은 잘 작동하고 Summarize(By( )) 명령처럼 까다롭지 않습니다.
감사해요!,
디에스
Re: JSL 코드 및 요약 도움말Hurricanes.jmp의 경우 :year 열로 인해 작동합니다.
JMP에서 year(:date) 를 :year 로 다시 라우팅하나요?
Re: JSL 코드 및 요약 도움말안녕하세요 @hogi , 그럴 수도 있겠네요. 저는 전혀 모르겠고, JSL이 왜 그런 일을 하는지 이해가 안 갑니다. 방금 그 이론을 테스트해 보았는데, 예상대로 Summarize 명령은 작동하지 않았습니다. :Year 열이 사라졌기 때문입니다. 참 이상하네요! 그리고 :Date 열이 Hurricanes.jmp 파일에 있는 공식이기는 하지만, 중요하지 않습니다. 공식을 제거하면 잘 작동하지만, :Year 열이 삭제되면 더 이상 작동하지 않습니다. 그 뒤에 있는 JSL 로직은 이해가 안 되지만, 사실 그렇습니다.