Add next and previous business date of each date in array row

3 visualizaciones (últimos 30 días)
chiefjia
chiefjia el 8 de Oct. de 2021
Comentada: C B el 9 de Oct. de 2021
Dear MATLAB experts,
I have a table named 'events', which contains many unique dates and I want to get the previous and next business dates of each date (row) included in this table. If one row were t, then I would like to get t-1 and t+1 (in business days), without these newly created rows replacing already existing ones, but creating one new row for each one of the newly created dates. I have thought of the code below, but it doesn't work so far:
% Create array
eventsWindow3 = table2array(events);
% Iterate through previous and next business date
for i=1:length(eventsWindow3)
eventsWindow3(i-1,:) = busdate(eventsWindow3(i,:), -1);
eventsWindow3(i+1,:) = busdate(eventsWindow3(i,:), 1);
end
You can find 'events' attached to this table.
I would really appreciate your help, thank you in advance.

Respuesta aceptada

C B
C B el 8 de Oct. de 2021
Editada: C B el 8 de Oct. de 2021
@chiefjia will this work?
% Create array
EventsArray = [datetime('today') datetime('yesterday') datetime('tomorrow')]
newArray = [];
% Iterate through previous and next business date
for i=1:length(EventsArray)
newArray{end+1} = EventsArray(i)-1;
newArray{end+1} = EventsArray(i);
newArray{end+1} = EventsArray(i)+1;
end
newArray
EventsArray =
1×3 datetime array
08-Oct-2021 07-Oct-2021 09-Oct-2021
newArray =
1×9 cell array
Columns 1 through 5
{[07-Oct-2021 00:00:00]} {[08-Oct-2021]} {[09-Oct-2021 00:00:00]} {[06-Oct-2021 00:00:00]} {[07-Oct-2021]}
Columns 6 through 9
{[08-Oct-2021 00:00:00]} {[08-Oct-2021 00:00:00]} {[09-Oct-2021]} {[10-Oct-2021 00:00:00]}
  2 comentarios
chiefjia
chiefjia el 8 de Oct. de 2021
Hi Chetan,
thanks a lot for your response, this works. I've also adapted your suggestion to my code and this is what I got:
% Create array to iterate through previous and next business date
eventsWindow = table2array(events); % For setting up different event windows
eventsWindow3 = [];
% For loop that adds a row for each one of the business dates
for i=1:length(eventsWindow)
eventsWindow3{end+1} = cellstr(datetime(busdate(eventsWindow(i), -1), 'ConvertFrom', 'datenum'));
eventsWindow3{end+1} = eventsWindow(i);
eventsWindow3{end+1} = cellstr(datetime(busdate(eventsWindow(i), 1),'ConvertFrom', 'datenum'));
end
C B
C B el 9 de Oct. de 2021
Nice to see you worked it out.

Iniciar sesión para comentar.

Más respuestas (1)

KSSV
KSSV el 8 de Oct. de 2021
d = datetime('today')
d = datetime
08-Oct-2021
d0 = d-day(1)
d0 = datetime
07-Oct-2021
d1 = d+day(1)
d1 = datetime
09-Oct-2021
  3 comentarios
KSSV
KSSV el 8 de Oct. de 2021
You are running a loop for each event right? Then you have the date.
chiefjia
chiefjia el 8 de Oct. de 2021
Yes, I am running a loop for each event, which is a row of the array eventsWindow3, but still I can't apply your solution

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by