Data Validation Pipelines
Missing Code Filter
Count Usable Values
Scientific data often uses sentinel values before a richer missing-data format is introduced. A validation pass can count the usable readings.
Program
Play the program to choose the sentinel code and see how the valid-count summary changes.
missing_code_filter.f90
program missing_code_filter_demo
implicit none
integer :: readings(5)
integer :: missing_code
integer :: usable_count
integer :: usable_total
logical :: usable(5)
readings = [12, -99, 15, 18, -99]
missing_code =
usable = readings /= missing_code
usable_count = count(usable)
usable_total = sum(readings, mask=usable)
print '(I0, 1X, I0)', usable_count, usable_total
end program missing_code_filter_demo
program missing_code_filter_demo
implicit none
integer :: readings(5)
integer :: missing_code
integer :: usable_count
integer :: usable_total
logical :: usable(5)
readings = [12, -99, 15, 18, -99]
missing_code =
usable = readings /= missing_code
usable_count = count(usable)
usable_total = sum(readings, mask=usable)
print '(I0, 1X, I0)', usable_count, usable_total
end program missing_code_filter_demo
program missing_code_filter_demo
implicit none
integer :: readings(5)
integer :: missing_code
integer :: usable_count
integer :: usable_total
logical :: usable(5)
readings = [12, -99, 15, 18, -99]
missing_code =
usable = readings /= missing_code
usable_count = count(usable)
usable_total = sum(readings, mask=usable)
print '(I0, 1X, I0)', usable_count, usable_total
end program missing_code_filter_demo
sentinel
A sentinel value marks readings that should be excluded.
logical mask
`readings /= missing_code` creates a mask of usable positions.
masked sum
`sum(readings, mask=usable)` ignores values that are not usable.