I have a dataset where I will be using the FILTER formula to extract specific values relative to an individual. For each individual, I only want to be extracting the last 2 scores. The data is in descending chronological order so effectively I just need the first 2 entries that exist.
| Year | Name | Score |
|---|---|---|
| 2022 | A | 50 |
| 2022 | B | 40 |
| 2022 | C | 60 |
| 2021 | A | 10 |
| 2021 | B | 5 |
| 2020 | A | 90 |
| 2020 | B | 76 |
| 2019 | A | 45 |
| 2019 | C | 12 |
| 2018 | A | 14 |
| 2017 | A | 13 |
Using a dataset similar to the one attached, if I wasn't interested in only the last 2 scores, I would use something like
=FILTER(A:C,B:B=B1) B1 for A, B2 for B etc.
But doing that would give me 6 rows for A, 3 for B and 2 for C. To standardize this, I only want to consider, at max, 2 results per individual. How do I change the FILTER formula to achieve this?
Don't use entire column references: FILTER's include parameter processes all cells passed to it, so you're effectively asking it to compute more than a million calculations, even if you only have a few hundred rows' worth of data.
You could use TAKE if your version of Excel has that function:
=TAKE(FILTER(A1:C12,B1:B12=B2),2)
or else INDEX with SEQUENCE:
=INDEX(FILTER(A1:C12,B1:B12=B2),SEQUENCE(2),SEQUENCE(,3))
If you're not sure how to create a dynamic reference to the last-used row, define LRow within Name Manager as:
=MATCH("Ω",$B:$B)
after which the first of the above becomes:
=TAKE(FILTER(A1:INDEX(C:C,LRow),B1:INDEX(B:B,LRow)=B2),2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With