One simple ranking method counts how many values are higher than the selected value.

Program

Play the program to choose a different row and recompute its rank.

rank_by_count.f90
program rank_by_count_demo
    implicit none
    integer :: values(4)
    integer :: selected_index
    integer :: selected_score
    integer :: i
    integer :: higher_count
    integer :: rank

    values = [14, 20, 17, 12]
    selected_index = 
    selected_score = values(selected_index)
    higher_count = 0
    do i = 1, 4
        if (values(i) > selected_score) higher_count = higher_count + 1
    end do
    rank = higher_count + 1
    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
end program rank_by_count_demo
program rank_by_count_demo
    implicit none
    integer :: values(4)
    integer :: selected_index
    integer :: selected_score
    integer :: i
    integer :: higher_count
    integer :: rank

    values = [14, 20, 17, 12]
    selected_index = 
    selected_score = values(selected_index)
    higher_count = 0
    do i = 1, 4
        if (values(i) > selected_score) higher_count = higher_count + 1
    end do
    rank = higher_count + 1
    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
end program rank_by_count_demo
program rank_by_count_demo
    implicit none
    integer :: values(4)
    integer :: selected_index
    integer :: selected_score
    integer :: i
    integer :: higher_count
    integer :: rank

    values = [14, 20, 17, 12]
    selected_index = 
    selected_score = values(selected_index)
    higher_count = 0
    do i = 1, 4
        if (values(i) > selected_score) higher_count = higher_count + 1
    end do
    rank = higher_count + 1
    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
end program rank_by_count_demo
selected row `selected_score` copies the score from the chosen row.
higher count Every higher value moves the selected score one rank lower.
rank `higher_count + 1` gives first place when no values are higher.