Existe-t-il un équivalent de la fonction EOMonth d'Excel dans JMP?Tout,
Essayer de voir existe-t-il un équivalent de la fonction EOMonth d'Excel dans JMP? J'ai essayé de le réécrire en tant que fonction définie par l'utilisateur. Bien que cela fonctionne dans la plupart des cas, mon code échoue dans certains cas. Essayer de voir si JMP offre une fonction intégrée avant de passer plus de temps à cela?
Source pour la capture d'écran: ExcelJet

Re: Existe-t-il un équivalent de la fonction EOMonth d'Excel dans JMP?Voici une autre version qui pourrait être utile. Celui-ci a l'avantage de pouvoir accepter les arguments négatifs MonthToEval et évite d'avoir à essayer plusieurs dates pour voir si la date est valide ou non.
Mon principal changement ici était de faire avancer le mois d'un mois supplémentaire et d'utiliser Date MDY () pour obtenir le premier jour de ce mois prochain, puis soustraire un jour de la réponse finale.
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: Existe-t-il un équivalent de la fonction EOMonth d'Excel dans JMP?Voici une version alternative de la même fonction. Il utilise un algorithme plus simple
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: Existe-t-il un équivalent de la fonction EOMonth d'Excel dans JMP?Eh bien, je suppose que je l'ai compris - mais si quelqu'un propose une solution plus simple, plus performante et plus robuste - partagez-la, ne faites pas mal.
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));