Gibt es ein Äquivalent zur Excel-EOMonth-Funktion in JMP?Alles,
Versuchen zu sehen, gibt es eine Entsprechung der EOMonth-Funktion von Excel in JMP? Ich habe versucht, es als benutzerdefinierte Funktion neu zu schreiben. Während es mit den meisten Fällen funktioniert, schlägt mein Code in einigen Fällen fehl. Versuchen Sie herauszufinden, ob es eine eingebaute Funktion gibt, die JMP anbietet, bevor ich mehr Zeit damit verbringe?
Quelle für Screenshot: ExcelJet

Re: Gibt es in JMP ein Äquivalent zur Excel-EOMonth-Funktion?Hier ist eine andere Version, die nützlich sein könnte. Diese Methode hat den Vorteil, dass sie negative MonthToEval-Argumente akzeptieren kann, und vermeidet, dass mehrere Daten versucht werden müssen, um zu sehen, ob das Datum gültig ist oder nicht.
Meine wichtigste Änderung hier war, den Monat um einen zusätzlichen Monat nach vorne zu schieben und Datum MDY () zu verwenden, um den ersten Tag des nächsten Monats zu erhalten, und dann einen Tag von der endgültigen Antwort abziehen.
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: Gibt es in JMP ein Äquivalent zur Excel-EOMonth-Funktion?Hier ist eine alternative Version derselben Funktion. Es verwendet einen einfacheren Algorithmus
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: Gibt es in JMP ein Äquivalent zur Excel-EOMonth-Funktion?Nun, ich schätze, ich habe es herausgefunden - aber wenn jemand eine einfachere / bessere / robustere Lösung findet - bitte teilen - tut nicht weh.
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));