commit 3032dc570dd21e38320ad173cfd9b1cbe8618e64
parent 06faf285967615d0034e3b0fe1cb654a4bfcec32
Author: Erik Loualiche <eloualic@umn.edu>
Date: Sun, 22 Mar 2026 10:25:13 -0500
Expand missing-value flags to cover -999, -9999, -99.99
Previously only -999.99 was treated as missing in GSW data.
Add -999.0, -9999.0, -99.99 which are also common sentinel values
in WRDS/economic datasets. Includes 10 new test assertions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat:
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/ImportYields.jl b/src/ImportYields.jl
@@ -296,9 +296,8 @@ function _safe_parse_float(value)
try
numeric_value = Float64(value)
- # Check for common missing data flags used in economic datasets
- # -999, -9999 are common flags for missing/unavailable data
- if numeric_value == -999.99
+ # Common missing data flags in economic/financial datasets
+ if numeric_value in (-999.99, -999.0, -9999.0, -99.99)
return missing
end
diff --git a/test/UnitTests/Yields.jl b/test/UnitTests/Yields.jl
@@ -318,6 +318,19 @@
@test FinanceRoutines.bond_yield_excel(Date("2014-07-31"), Date("2032-05-15"), 0.05, 114.083, 100.0; frequency=2) ≈ 0.0389 atol=5e-4
end
+ @testset "Missing value flag handling" begin
+ @test ismissing(FinanceRoutines._safe_parse_float(-999.99))
+ @test ismissing(FinanceRoutines._safe_parse_float(-999.0))
+ @test ismissing(FinanceRoutines._safe_parse_float(-9999.0))
+ @test ismissing(FinanceRoutines._safe_parse_float(-99.99))
+ @test !ismissing(FinanceRoutines._safe_parse_float(-5.0)) # legitimate negative
+ @test FinanceRoutines._safe_parse_float(3.14) ≈ 3.14
+ @test ismissing(FinanceRoutines._safe_parse_float(""))
+ @test ismissing(FinanceRoutines._safe_parse_float(missing))
+ @test FinanceRoutines._safe_parse_float("2.5") ≈ 2.5
+ @test ismissing(FinanceRoutines._safe_parse_float("abc"))
+ end
+
end # @testset "GSW Extended Test Suite"