Smarter Loop with big matrices
    6 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hello everyone, i've got the following problem. I want to create 25 portfolios sorted by two variables. So at the end i should sort one variable at the quintiles and the other variable at the quintiles which will give me 25 portfolios if I combine them. I have a solution for this, but my loops work too long (over 2 hours). The size of the matrices are 594 x 15726. Here is my first and my second loop out of an overall of 6 loops.
Loop 1 for a quintile sort for the first variable
% 5 portfolios sorted for size
s1 = NaN(size(NSI));
s2 = NaN(size(NSI));
s3 = NaN(size(NSI));
s4 = NaN(size(NSI));
s5 = NaN(size(NSI));
u = 1;
 for m=1:12:589;
    n=min(594, m + 12 - 1);
    for i=1:size(NSI,2)
        if me(u,i) <= prctile(me(u,:),20,2);
            s1(m:n,i) = 1;
        elseif me(u,i) > prctile(me(u,:),20,2) & me(u,i) <= prctile(me(u,:),40,2);
            s2(m:n,i) = 1;
        elseif me(u,i) > prctile(me(u,:),40,2) & me(u,i) <= prctile(me(u,:),60,2);
            s3(m:n,i) = 1;
        elseif me(u,i) > prctile(me(u,:),60,2) & me(u,i) <= prctile(me(u,:),80,2);
            s4(m:n,i) = 1;
        elseif me(u,i) > prctile(me(u,:),80,2);
            s5(m:n,i) = 1;
        end
    end
    u = u + 12;
end
Loop 2 where I take the first portfolio of the first variable
% 5 portfolios sorted for book-to market for the smallest size portfolio
s1b1 = NaN(size(NSI));
s1b2 = NaN(size(NSI));
s1b3 = NaN(size(NSI));
s1b4 = NaN(size(NSI));
s1b5 = NaN(size(NSI));
u = 1;
 for m=1:12:589;
    n=min(594, m + 12 - 1);
    for i=1:size(NSI,2)
        if beme(u,i) <= prctile(beme(u,:),20,2);
            s1b1(m:n,i) = s1(m:n,i);
        elseif beme(u,i) > prctile(beme(u,:),20,2) & beme(u,i) <= prctile(beme(u,:),40,2);
            s1b2(m:n,i) = s1(m:n,i);
        elseif beme(u,i) > prctile(beme(u,:),40,2) & beme(u,i) <= prctile(beme(u,:),60,2);
            s1b3(m:n,i) = s1(m:n,i);
        elseif beme(u,i) > prctile(beme(u,:),60,2) & beme(u,i) <= prctile(beme(u,:),80,2);
            s1b4(m:n,i) = s1(m:n,i);
        elseif beme(u,i) > prctile(beme(u,:),80,2);
            s1b5(m:n,i) = s1(m:n,i);
        end
    end
    u = u + 12;
end
to be continued for the other 4 portfolios.
Is there a smarter way to get the 25 portfolios?. Thanks in advance.
Risposte (2)
  Steven Lord
    
      
 il 18 Apr 2017
        If I understand what you're doing correctly, I think the discretize and/or histcounts functions will be of interest to you.
  Christoffer Benneballe
 il 21 Dic 2019
        Hi Sascha. 
Would it be possible to view your dataset? 
I'm trying to do a similar exercise in Matlab.
Best,
Christoffer
0 Commenti
Vedere anche
Categorie
				Scopri di più su Matrix Indexing in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




