JMP에 Excel의 EOMonth 함수가 있습니까?모든,
JMP에서 엑셀의 EOMonth 기능과 동일한 기능이 있습니까? 사용자 정의 함수로 다시 작성하려고했습니다. 대부분의 경우 작동하지만 일부 경우에는 코드가 실패합니다. JMP가 제공하는 inbuilt 함수가 더 많은 시간을 소비하기 전에 제공되는지 확인하려고합니까?
스크린 샷 소스 : ExcelJet

제목 : Re : Excel의 EOMonth 함수가 JMP에 있나요?유용 할 수있는 다른 버전이 있습니다. 이것은 음수의 MonthToEval 인수를 받아 들일 수있는 장점이 있으며, 날짜가 유효한지 여부를보기 위해 여러 날짜를 시도 할 필요가 없습니다.
여기에서 가장 중요한 변경 사항은 한 달 추가 앞으로 달을 밀어 넣고, 그 다음 달의 첫날을 얻기 위해 Date MDY ()를 사용하고 마지막 답에서 하루를 빼는 것입니다.
EOMONTH = Function( {Date, MonthToEval},
{Date, MonthToEval, EvalMonth, EvalYear, ReturnDate},
EvalMonth = Month( Date ) + MonthToEval + 1;
EvalYear = Year( Date );
While( EvalMonth > 12, EvalMonth-=12; EvalYear++; );
While( EvalMonth < 1, EvalMonth+=12; EvalYear--; );
ReturnDate = Date MDY( EvalMonth, 1, EvalYear ) - In Days( 1 );
);제목 : Re : Excel의 EOMonth 함수가 JMP에 있나요?동일한 기능의 대체 버전이 있습니다. 더 간단한 알고리즘을 사용합니다.
EOMONTH = Function( {Date, MonthToEval},
{Date, MonthToEval, EvalMonth, EvalYear, EvalDay, ReturnDate},
EvalMonth = Month( Date );
EvalYear = Year( Date );
If( EvalMonth + MonthToEval > 12,
EvalMonth = EvalMonth + MonthToEval - 12;
EvalYear = EvalYear + 1;
,
EvalMonth = EvalMonth + MonthToEval
);
EvalDay = 28;
While( Is Missing( Date MDY( EvalMonth, EvalDay, EvalYear ) ) == 0,
ReturnDate = Date MDY( EvalMonth, EvalDay, EvalYear );
EvalDay = EvalDay + 1;
);
ReturnDate;
);
mydate = Date MDY( 2, 20, 2020 );
mymonth = 0;
Show( Format( eomonth( mydate, mymonth ), "mm/dd/yyyy" ) );제목 : Re : Excel의 EOMonth 함수가 JMP에 있나요?글쎄, 내가 알아 낸 것 같아.하지만 누군가가 더 쉽고 / 더 좋고 / 견고한 솔루션을 제공한다면, 공유하십시오. 아프지 않아야합니다.
IsLeapYear = function({Input_Year},{Default Local},
If(Is String(Input_Year),
Input_Year = Num(Input_Year);
);
If( (Mod(Input_Year,400) == 0 | (Mod(Input_Year,4) == 0 & Mod(Input_Year,100)!= 0)),
return(1);
,
return(0);
);
);
EOMonth = function({Start_Date,Months},{Default Local},
NewDate = Date Increment(Start_Date,"Month",Months,"start");
NewMonth = Month(NewDate);
NewDay = Day(NewDate);
NewYear = Year(NewDate);
If(Contains({1,3,5,7,8,10,12},NewMonth),
NewDay = 31;
,
If(Contains({4,6,9,11},NewMonth),
NewDay = 30;
,
If(NewMonth == 2,
If(IsLeapYear(NewYear),
NewDay = 29;
,
NewDay = 28;
);
);
);
);
// Return Result
return(Date MDY(NewMonth,NewDay,NewYear));
);
Start_Date = Date MDY(2,15,2015);
Months = -15;
Show(As Date(Start_Date));
NewDate = EOMonth(Start_Date,Months);
Show(As Date(NewDate));