안녕하세요 커뮤니티
다시 한 번 당신의 도움과 조언이 필요합니다. 새로운 사용자로서 저는 배우기 위해 고군분투하고 있습니다.
시작일과 종료일이있는 데이터 테이블이 있습니다. 시작일과 종료일 사이의 영업일 수를 계산하고 싶습니다. JMP에서이를 수행하는 가장 좋은 방법은 무엇입니까? 내 아이디어는 열을 추가하고 공식을 만드는 것입니다. 날짜 차이 ?? 하지만 더 나은 옵션이 무엇인지 잘 모르겠습니다.
첨부 된 예를 참조하십시오

감사
남자 이름
가장 먼저해야 할 일은 "근무일"을 정의하는 것입니다. 평일 (월 ~ 금)마다인가요? 은행 / 정부 공휴일은 어떻습니까? 종교적 휴일?
다른 질문도 있습니다. JMP 날짜에는 항상 시간이 포함되며 종종 자정 이후 0 초로 설정됩니다. 그러나 범위가 7 일 후 월요일 정오부터 월요일 정오까지 인 경우 두 개의 반월을 어떻게 계산 하시겠습니까? 아니면 월요일이 시작되는 자정이더라도 둘 다 계산해야합니까?
범위가 작고 너무 많지 않은 경우 날짜 계산은 나쁜 선택이 아닐 수 있습니다 (잘 테스트되지 않은 코드는 다음과 같습니다).
// define an expression that answers the question
includeThisDate = Expr(
2/*monday*/<= Day Of Week( date ) <= 6/*friday*/
);
// brute force counting:
countSelectedDaysInRange = Function( {firstDate, lastDate, testexpr},
{date, count},
If( lastDate < firstDate,
Throw( "dates reversed" )
);
count = 0;
For( date = firstDate, date <= lastDate, date += In Days( 1 ),
count += (testexpr != 0)
);
count;
);
Show( 262 == countSelectedDaysInRange( 1jan2020, 31dec2020, Name Expr( includeThisDate ) ) );
Show( 104 == countSelectedDaysInRange( 1jan2020, 31dec2020, Expr( !(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/) ) ) );
Show( 366 == countSelectedDaysInRange( 1jan2020, 31dec2020, 1 ) );// 2020 is leap year
Show( 0 == countSelectedDaysInRange( 1jan2020, 31dec2020, 0 ) );// no days counted 262 == countSelectedDaysInRange (01Jan2020, 31Dec2020, Name Expr (includeThisDate)) = 1;
104 == countSelectedDaysInRange (01Jan2020, 31Dec2020, Expr (! (2 <= 요일 (날짜) <= 6))) = 1;
366 == countSelectedDaysInRange (01Jan2020, 31Dec2020, 1) = 1;
0 == countSelectedDaysInRange (01Jan2020, 31Dec2020, 0) = 1;
위의 코드에는 마지막 날이 포함됩니다 (<= lastdate). 첫 번째 datetime 값에서 시작하여 24 시간 씩 증가하고 해당 datetime 값이 표현식을 충족하는 경우 계수에 1을 더합니다.
고통스러운 경험에서 나는 날짜와 시간으로 작업하는 것이 옳다는 것을 알고 있습니다.
내장 함수를 가능한 많이 사용하십시오.
다음에 관리하는 사람을 위해 코드를 주석으로 처리하십시오.
코드를 신중하게 테스트하십시오!
또한 대략적인 근사값 만 필요하다면
(1jan2021-1jan2020) / indays (1) * 5 / 7 == 261.428571428571
262 카운트에 가깝습니다.
편집하다: 날짜 차이 (1jan2020,1jan2021, "day") * 5/7 조잡한 대답이 더 간단 해 보일 수 있습니다.
네 근무일은 평일입니다. (월-금) 현지 공휴일도 조정할 수 있으면 좋을 것 같습니다.
어떤 제안?
간단한 해결책은 테스트 표현식을 확장하는 것입니다.
// define an expression that answers the question
holidays = associativearray({1jan2020,25dec2020});
includeThisDate = Expr(
(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/)
&
!(holidays<<CONTAINS></CONTAINS>2020 년에는 새해와 크리스마스가 평일에 떨어 지므로 262 개가 아니라 260 개입니다. 나중에 연관 배열을 업데이트해야하며 기록 데이터도 필요할 수 있습니다. 일부 공휴일은 매년 같은 날이 아닙니다. 이 얼마나 추악한 문제인지 ...
복잡한 솔루션은 다음과 같은 것을 사용할 수 있습니다. https://www.abstractapi.com/holidays-api
(신용 안녕하세요. ...에 대한 날짜 만 생성하도록 날짜 및 시간 열을 변경합니다. )
코딩 작업은 나에게 새롭고 작동하지 않는 것 같습니다. 그러나 나는 표준 공식 중 일부를 가지고 놀았고 해결책을 찾았습니다. 그러나 근무일 만 사용하지 않고 달력 일을 사용합니다. 이 실험의 경우 비교를 위해 동일하므로 충분합니다.
조금 추가하려면 안녕하세요. '모래 안녕하세요. 공휴일에 대한 생각 등 '현지 공휴일'에 대한 생각을 언급하셨습니다. '로컬'에 대한 표준 정의를 채택하지 않으면 정말 어려워집니다. 예를 들어 캐나다에는 미국과 마찬가지로 '추수 감사절'휴일이 있습니다. 캐나다는 미국과 다른 날을 제외하고는. 그리고 미국의 도시 또는 주 수준에서 시작하지 마십시오. 예를 들어, 메인 주와 매사추세츠 주에서 애국자의 날은 미국의 다른 곳에서는 축하되지 않는 휴일입니다. 더 끈적하게 만들기 위해 일부 비즈니스는 문을 닫고 다른 비즈니스는 계속 열려 있습니다. 은행 및 금융 기관 포함.
내가 가장 좋아하는 것은 오래된 노스 캐롤라이나 야구 휴가 .
안녕하세요 뿡뿡 ,
두 날짜 열 사이의 근무일 수를 계산하는 추가 기능을 잠시 작성했습니다. 제외 할 휴일 및 기타 특정 날짜는 추가 기능 디렉터리에 저장된 Holiday List.jmp 파일을 유지 관리하여 해결됩니다. 참고 :이 파일은 JMP 사용자의 컴퓨터에서 액세스 할 수있는 모든 위치에서 유지 관리되는 모든 문서 (Excel, .txt, .csv 등) 일 수 있지만 파일 위치를 제공하려면 기본 JSL을 약간 조정해야합니다. 그렇지 않으면 요청 된 요구 사항을 그대로 해결한다고 생각합니다. 공휴일 목록 파일을 다운로드, 설치 및 편집하려면 지침을 따르십시오. NETWORKDAYS 함수
도움이 되었기를 바랍니다,
작은 권총
안녕 제리
이것은 정말 도움이되었습니다. 나는 내 자신의 목록을 만들었고 이제 내가 원하는 것을 보여주었습니다.
감사
남자 이름