C19T = readtable('covid_data.xlsx');
mask = cellfun(@isempty, C19T.State);
C19T.BelongsTo(mask) = {'World'};
C19T.BelongsTo(~mask) = C19T.Country(~mask);
C19T.Name(mask) = C19T.Country(mask);
C19T.Name(~mask) = C19T.State(~mask);
assignin('base', name, country(C19T.Country(R), C19T.BelongsTo(R)));
This fullfills your requirement to create seperate objects whose names are the country names (or state name as appropriate) to hold data.
If you test it , you will find that it crashes when it gets to Nova Scotia or Central Africa, as it is not possible in MATLAB to create a variable name which has a space in it.
To work around this, you will need to use a MATLAB release that is something like 10 or 15 years old, and use a mex file to create a variable with the corrupt name. All current releases check variable names carefully and refuse to create such variables, but old enough versions were sometimes lax on the checking and it was possible. However, you would need to do some testing to find out whether you can find an old version that was lax enough and which also had the modern classdef system of class definitions.
Using a variable with a corrupt variable name such as that is going to be difficult.
You will also have problems if any of the country names contain non-Latin characters such as España or Sudán .