How so subset observations in a matrix?
    8 views (last 30 days)
  
       Show older comments
    
I have a matrix that has the follwing columns:
[GVKEY FYEAR SALE ASSET]
FYEAR ranges from 2005-2019 and there are many GVKEYs which are basically identifiers. I want to keep only those GVKEYS(observations) for which I have the entire 2005-2019 observations, as some may have only sub ranges like 2007-2009. 
How do I do this?
0 Comments
Accepted Answer
  Githin George
      
 on 25 Jul 2022
        
      Edited: Githin George
      
 on 25 Jul 2022
  
      Hi Prerna,
My understanding is that you want to filter out the rows of a matrix for those GVKEYs having observations from 2005-2019. I would like to make the assumption that the year range is continuous. You could try out the following piece of code.
keys = unique(data(:,1))
for i=1:numel(keys)
    keyData = data(data==keys(i),:)
    % from here you can compare with keyData length or compare the year
    % array to the 2nd column and based on that modify values in the actual
    % data array.
    col2 = sort(keyData(:,2))
    flag = isequal(col2,2005:2019)
    if(flag == 0)
        data(data==keys(i),:) = []
    end
end
I Hope this helps.
7 Comments
More Answers (1)
  KSSV
      
      
 on 25 Jul 2022
        idx = FYEAR >= 2007 & FYEAR <= 2009 ;
iwant_FYEAR = FYEAR(idx) ;
iwant_GVKEYS = GVKEYS(idx) ;
0 Comments
See Also
Categories
				Find more on Creating and Concatenating Matrices in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

