Effacer les filtres
Effacer les filtres

Creating a function for median

3 vues (au cours des 30 derniers jours)
Francis Chabot
Francis Chabot le 9 Fév 2021
Commenté : dpb le 10 Fév 2021
Hello,
I have a code that helps me calculate the median by SIC code that I'd like to modify to be able to use it as a function.
SICcode = xlsread('G-Score','Active','C3:C11');
ROA = xlsread('G-Score','Active','D3:D11');
SIC = [SICcode(:), ROA(:)];
splitapply(@median,SIC(:,2:end),findgroups(SIC(:,1)/100));
median(SIC(1,2:end));
tSIC=table(SIC(:,1),SIC(:,2:end),'VariableNames',{'SIC','Data'})
tSIC.Industry = fix(tSIC.SIC/100);
tSIC = tSIC(:,[1 end 2]);
rowfun(@(v)median(v,'all'),tSIC,'GroupingVariables','Industry', ...
'InputVariables','Data', ...
'OutputVariableNames','Median')
So, with this code I am able to compute the median of an industry by the first 2 digit of the SIC code.
The things is I'd like to make a function that will helps me with two things:
  1. Compute the ROA for more than one year, in this case 23 in total.
  2. Create a function that will let me do the same thing for differents statistics (ROE, Total Assets, CFO...), in this case about 20 in total.
I know it doesn't need "a lot" of work to create a function with this code but at this point I can't make it works.
Any helps would be appreciated.
Best regards,
Frank
  3 commentaires
Francis Chabot
Francis Chabot le 10 Fév 2021
I did it differently this time.
Data = xlsread('G-Score','All Data');
ROA = Data(2788:5571,2:end);
SICcode = xlsread('G-Score','All','C2:C2785');
SICROA = [SICcode(:), ROA(:,1:end)];
splitapply(@nanmedian,SICROA(2:end,:),findgroups(SICROA(:,1)/100));
It's only when I come to use the splitapply that I can't due to these errors:
Error using vertcat
Dimensions of arrays being concatenated are not consistent.
Error in splitapply>localapply (line 253)
finalOut{curVar} = vertcat(funOut{:,curVar});
Error in splitapply (line 132)
varargout = localapply(fun,splitData,gdim,nargout);
I know that it is possible because I can compute the median of each lines by doing it that way:
nanmedian(SICROA(2:end,2));
I find weird that it works by doing it separatly but when using it with the splitapply it won't work.
Best regards,
Frank
dpb
dpb le 10 Fév 2021
It's the issue I told you about before that there will be different numbers of elements in the groupings if there aren't the same number of elements per group -- and so, since median works by colum, it may also have a different number of results by group.
That's why I told you you needed to use the anonyomous function in order to pass the 'all' parameter so it returns only the overall median of the group each call.

Connectez-vous pour commenter.

Réponses (1)

Steven Lord
Steven Lord le 10 Fév 2021
I think you can do what you want more simply with groupsummary.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by