I am not certain what you want to do, however the correct approach to dealing with the missiing values is to convert the table to a timetable and then use retime approppriately to first fill the missing months (since I got the impression that is what you want to do), and then aggregate them.
Try something like this —
%Read data from CSV file
Flname = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/1359688/42083_Table_2_Monthly_NDCQ-2023-02-271.xlsx';
Tbl = readtable(Flname)
Tbl = 394×35 table
INDEX YEAR MN MMAX NO HMAX DT OC MMIN NO_1 LMIN DT_1 OC_1 TMRF NO_2 HVYRF DT_2 RD MWS NO_3 MEVP NO_4 MSSH NO_5 P1 P2 SN HA TH FG DS GF GA SQ LS
_____ ____ __ ____ __ ____ __ __ ____ ____ ____ ____ ____ _____ ____ _____ ____ __ ___ ____ __________ ____ __________ ____ __ __ __ __ __ __ __ __ __ __ __
42083 1980 1 10 31 14 25 1 2.3 31 -2.7 3 1 16 31 8.6 3 2 3.3 30 {0×0 char} 0 {0×0 char} 0 0 4 2 0 0 0 0 0 0 0 0
42083 1980 2 11.5 29 17.4 27 2 3.9 29 -1.5 5 1 20.4 29 7.8 16 2 3.8 29 {0×0 char} 0 {0×0 char} 0 0 7 4 0 1 0 0 0 0 0 0
42083 1980 3 13.5 30 20 21 1 5.1 30 -1.3 12 1 34.7 31 8.4 30 4 3.9 31 {0×0 char} 0 {0×0 char} 0 1 9 0 0 0 0 0 0 0 0 0
42083 1980 4 21.8 30 26.4 21 1 12.5 30 3.4 3 1 29.3 30 14.2 13 2 3.8 30 {0×0 char} 0 {0×0 char} 0 0 5 0 0 0 0 0 0 0 0 0
42083 1980 5 25 31 28.2 3 1 15.4 31 9.4 10 1 24.7 31 19.6 10 1 3.9 31 {0×0 char} 0 {0×0 char} 0 0 5 0 0 0 0 0 0 0 0 0
42083 1980 6 23.9 30 27.4 19 1 15 30 11 14 1 190 30 40.6 14 12 3 30 {0×0 char} 0 {0×0 char} 0 0 16 0 0 1 0 0 0 0 0 0
42083 1980 7 20.9 31 23.4 21 2 14.6 31 13.2 15 1 461.5 31 57.2 14 21 0.3 31 {0×0 char} 0 {0×0 char} 0 0 27 0 0 0 0 0 0 0 0 0
42083 1980 8 21.6 30 24.2 15 1 14.8 30 13.2 9 1 129.6 30 32.6 8 7 0.6 29 {0×0 char} 0 {0×0 char} 0 0 11 0 0 0 0 0 0 0 0 0
42083 1980 9 21.3 30 25.6 30 1 13.7 30 11.7 25 1 87.5 30 36.3 7 6 1.4 30 {0×0 char} 0 {0×0 char} 0 0 9 0 1 0 0 0 0 0 0 0
42083 1980 10 18.7 31 22.2 12 1 10.7 31 6.7 31 1 13.9 31 4.9 31 3 3.9 31 {0×0 char} 0 {0×0 char} 0 0 4 0 1 3 0 0 0 0 0 0
42083 1980 11 15 29 17.4 19 1 6.8 30 1.5 28 1 56.9 30 39.8 28 3 5.3 30 {0×0 char} 0 {0×0 char} 0 0 5 0 0 1 0 0 0 0 0 0
42083 1980 12 13.2 31 17.1 21 2 5.7 31 NaN 24 1 28.4 31 17.7 26 3 4.7 31 {0×0 char} 0 {0×0 char} 0 0 4 0 0 0 0 0 0 0 0 0
42083 1981 1 8.5 28 16 16 1 1.4 30 -3.3 24 1 31.5 30 8.1 24 5 5.9 30 {0×0 char} 0 {0×0 char} 0 0 8 5 0 0 0 0 0 0 0 0
42083 1981 2 12.1 23 16.4 22 2 4 23 NaN 9 2 22.4 23 10.8 28 3 6.5 23 {0×0 char} 0 {0×0 char} 0 0 6 4 0 0 0 0 0 0 0 0
42083 1981 3 13.3 24 18.4 30 1 5.4 26 1.1 11 2 106.4 27 27.8 22 8 6.8 27 {0×0 char} 0 {0×0 char} 0 0 14 3 0 1 0 0 0 0 0 0
42083 1981 4 20.4 28 24.6 29 1 11.6 27 5.2 6 2 20.8 28 9.4 17 2 5.1 28 {0×0 char} 0 {0×0 char} 0 0 5 0 1 2 0 0 0 0 0 0
YM = datetime(Tbl.YEAR,Tbl.MN,ones(size(Tbl.YEAR)), 'Format','yyyy MM'); % Create A 'datetime' Array
Tbl = removevars(Tbl,{'YEAR','MN'}); % Remove Now-Redundant Variables
addvars(Tbl,YM,'before',1); % Insert 'YM' As First Variable
TTbl = table2timetable(Tbl,'RowTimes',YM); % Define 'YM' As The 'RowTimes' Variable
TTbl = retime(TTbl, 'monthly', 'fillwithmissing') % Interpolate 'Time', Fill Missing Values With 'NaN'
TTbl = 511×33 timetable
Time INDEX MMAX NO HMAX DT OC MMIN NO_1 LMIN DT_1 OC_1 TMRF NO_2 HVYRF DT_2 RD MWS NO_3 MEVP NO_4 MSSH NO_5 P1 P2 SN HA TH FG DS GF GA SQ LS
_______ _____ ____ __ ____ __ __ ____ ____ ____ ____ ____ _____ ____ _____ ____ __ ___ ____ __________ ____ __________ ____ __ __ __ __ __ __ __ __ __ __ __
1980 01 42083 10 31 14 25 1 2.3 31 -2.7 3 1 16 31 8.6 3 2 3.3 30 {0×0 char} 0 {0×0 char} 0 0 4 2 0 0 0 0 0 0 0 0
1980 02 42083 11.5 29 17.4 27 2 3.9 29 -1.5 5 1 20.4 29 7.8 16 2 3.8 29 {0×0 char} 0 {0×0 char} 0 0 7 4 0 1 0 0 0 0 0 0
1980 03 42083 13.5 30 20 21 1 5.1 30 -1.3 12 1 34.7 31 8.4 30 4 3.9 31 {0×0 char} 0 {0×0 char} 0 1 9 0 0 0 0 0 0 0 0 0
1980 04 42083 21.8 30 26.4 21 1 12.5 30 3.4 3 1 29.3 30 14.2 13 2 3.8 30 {0×0 char} 0 {0×0 char} 0 0 5 0 0 0 0 0 0 0 0 0
1980 05 42083 25 31 28.2 3 1 15.4 31 9.4 10 1 24.7 31 19.6 10 1 3.9 31 {0×0 char} 0 {0×0 char} 0 0 5 0 0 0 0 0 0 0 0 0
1980 06 42083 23.9 30 27.4 19 1 15 30 11 14 1 190 30 40.6 14 12 3 30 {0×0 char} 0 {0×0 char} 0 0 16 0 0 1 0 0 0 0 0 0
1980 07 42083 20.9 31 23.4 21 2 14.6 31 13.2 15 1 461.5 31 57.2 14 21 0.3 31 {0×0 char} 0 {0×0 char} 0 0 27 0 0 0 0 0 0 0 0 0
1980 08 42083 21.6 30 24.2 15 1 14.8 30 13.2 9 1 129.6 30 32.6 8 7 0.6 29 {0×0 char} 0 {0×0 char} 0 0 11 0 0 0 0 0 0 0 0 0
1980 09 42083 21.3 30 25.6 30 1 13.7 30 11.7 25 1 87.5 30 36.3 7 6 1.4 30 {0×0 char} 0 {0×0 char} 0 0 9 0 1 0 0 0 0 0 0 0
1980 10 42083 18.7 31 22.2 12 1 10.7 31 6.7 31 1 13.9 31 4.9 31 3 3.9 31 {0×0 char} 0 {0×0 char} 0 0 4 0 1 3 0 0 0 0 0 0
1980 11 42083 15 29 17.4 19 1 6.8 30 1.5 28 1 56.9 30 39.8 28 3 5.3 30 {0×0 char} 0 {0×0 char} 0 0 5 0 0 1 0 0 0 0 0 0
1980 12 42083 13.2 31 17.1 21 2 5.7 31 NaN 24 1 28.4 31 17.7 26 3 4.7 31 {0×0 char} 0 {0×0 char} 0 0 4 0 0 0 0 0 0 0 0 0
1981 01 42083 8.5 28 16 16 1 1.4 30 -3.3 24 1 31.5 30 8.1 24 5 5.9 30 {0×0 char} 0 {0×0 char} 0 0 8 5 0 0 0 0 0 0 0 0
1981 02 42083 12.1 23 16.4 22 2 4 23 NaN 9 2 22.4 23 10.8 28 3 6.5 23 {0×0 char} 0 {0×0 char} 0 0 6 4 0 0 0 0 0 0 0 0
1981 03 42083 13.3 24 18.4 30 1 5.4 26 1.1 11 2 106.4 27 27.8 22 8 6.8 27 {0×0 char} 0 {0×0 char} 0 0 14 3 0 1 0 0 0 0 0 0
1981 04 42083 20.4 28 24.6 29 1 11.6 27 5.2 6 2 20.8 28 9.4 17 2 5.1 28 {0×0 char} 0 {0×0 char} 0 0 5 0 1 2 0 0 0 0 0 0
TTbl.MEVP = str2double(TTbl.MEVP); % Convert String Variable To Numeric
TTbl.MSSH = str2double(TTbl.MSSH); % Convert String Variable To Numeric
VN = TTbl.Properties.VariableNames;
TTblYearlyMean = retime(TTbl,'yearly',@(x)mean(x,'omitnan')) % Calculate Yearly Mean
TTblYearlyMean = 43×33 timetable
Time INDEX MMAX NO HMAX DT OC MMIN NO_1 LMIN DT_1 OC_1 TMRF NO_2 HVYRF DT_2 RD MWS NO_3 MEVP NO_4 MSSH NO_5 P1 P2 SN HA TH FG DS GF GA SQ LS
_______ _____ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ______ ____ ____ _____ ______ ________ ______ _______ ________ _______ ________ ________ ____ ________ __ __
1980 01 42083 18.033 30.25 21.942 19.5 1.25 10.042 30.333 5.8727 14.917 1 91.075 30.417 23.975 16.667 5.5 3.1583 30.25 NaN 0 NaN 0 0.083333 8.8333 0.5 0.16667 0.5 0 0 0 0 0 0
1981 01 42083 17.508 28.25 21.417 18.167 1.3333 9.625 28.417 6.92 15.75 1.3333 109.73 28.75 28.808 18.583 6.6667 4.3917 28.75 NaN 0 NaN 0 0 9.75 1 0.083333 1.1667 0 0.16667 0 0 0 0
1982 01 42083 16.4 30.25 20.908 17.167 1.0833 8.6917 30.333 3.4667 19.75 1 111.07 30.333 27.1 17.583 7.8333 4.975 30.167 NaN 0 NaN 0 0.083333 11.083 1.9167 0.5 1.3333 0.083333 0 0 0 0 0
1983 01 42083 16.333 30.25 20.483 16.917 1.25 9.2364 30.417 4.2182 17.917 1 100.46 30.417 30.092 18.333 6.75 4.5417 30.417 NaN 0 NaN 0 0.25 10.833 1.6667 0.33333 1.3333 0 0.25 0 0 0 0
1984 01 42083 17.467 30.5 21.725 15.917 1.0833 10.6 30.5 5.1333 18.083 1.0833 83.375 30.417 20.717 19.833 6.1667 4.0583 30.5 NaN 0 NaN 0 0.41667 8.6667 1 0.25 0.91667 0 0 0 0 0 0
1985 01 42083 17.65 29.083 22.042 15.5 1.0833 9.9818 29.083 5.2667 14 1.0833 117.22 29.083 31.45 15.667 6.8333 3.5167 28.833 NaN 0 NaN 0 0.16667 11.167 0.91667 0.33333 0.75 0 0 0 0 0 0
1986 01 42083 16.958 30 21.625 13.333 1.0833 9.1 30.083 5.4222 17.5 1 93.275 30.083 32.083 17.083 6.1667 3.9583 30.083 NaN 0 NaN 0 0.33333 9 1.1667 0.25 0.5 0 0 0 0 0 0
1987 01 42083 18.417 29.5 23.017 18.417 1.1667 10.492 29.5 5.3667 14.583 1.0833 79.758 29.75 24.042 16.917 5.3333 3.4 27.5 NaN 0 NaN 0 0.083333 7.1667 0.58333 0.083333 1.3333 0.083333 0.083333 0 0 0 0
1988 01 42083 18.887 30.5 23.475 16.5 1.125 11.125 30.5 6.6625 17.75 1.25 152.39 30.5 24.875 17.625 8.875 3.7625 30.375 NaN 0 NaN 0 0.25 11.5 1.25 0.125 0.375 0 0 0 0 0 0
1989 01 42083 19.467 27.333 22.467 8.5 1.3333 11.85 27.333 9.26 19 1.1667 130.45 27.333 49.233 13.5 5.3333 2.95 27.333 NaN 0 NaN 0 0.5 8.5 0.5 0.16667 5.3333 7.1667 0 0 0 0 0
1990 01 42083 18.475 28.917 22.6 13.667 1 10.217 28.917 7.41 15.5 1 144.6 28.917 37.958 14.5 8.5 3.5 28.917 NaN 0 NaN 0 0.66667 11.417 1.25 2.5833 6.5 7.6667 0 0 0 0 0
1991 01 42083 18.675 29.75 22.992 19.167 1.25 10.025 29.75 6.58 14.667 1.0833 85.067 29.75 24.933 12.333 5.8333 3.9583 29.75 NaN 0 4.5 6.9167 1 9.5 1.4167 1.0833 5.5 4.75 0 0.25 0 0 0
1992 01 42083 18.85 29.917 22.9 14.583 1 9.775 30.083 5.55 17.5 1.25 119.93 30.083 30.342 17.083 7.0833 3.8833 30.083 NaN 0 5.225 10.333 0.75 9.9167 0.58333 0.33333 1.8333 3.5833 0 0 0 0 0
1993 01 42083 19.4 30.417 23.433 16.083 1.1667 11.173 30.417 6.3545 17.583 1.0833 126.58 30.417 30.192 16.75 7.5833 4.0833 30.417 NaN 0 NaN 0 0.66667 10.5 1.4167 1.3333 5.25 6.1667 0 0 0 0 0
1994 01 42083 19.342 30.167 23.508 17.083 1 10.775 30.333 7.5182 17.917 1.3333 133.36 30.333 30.875 17.917 7.3333 3.3833 30.167 NaN 0 NaN 0 0.41667 13 1.0833 0.91667 7.0833 6.5 0 0 0.083333 0 0
1995 01 42083 18.775 30.167 23.092 17.083 1 10.592 30.333 8.5 15 1.1667 161.14 30.333 40.292 17.083 8.9167 3.425 30.333 NaN 0 NaN 0 0.58333 11.5 1.5833 1.5833 6.5833 8.75 0 0.25 0.083333 0 0
figure % Plot Selected Variables
plot(TTblYearlyMean.Time, TTblYearlyMean{:,[4 7]})
grid
xlabel('Time')
ylabel('Variable')
legend(VN{[4 7]}, 'Location','best')
This should get you started.
.