Quarterly Sector Accounts - Public Sector Debt, consolidated, nominal value

Data - OECD


Info

source dataset Title .html .rData
oecd QASA_TABLE7PSD Quarterly Sector Accounts - Public Sector Debt, consolidated, nominal value 2026-08-13 2026-08-02

Data on public debt

source dataset Title .html .rData
oecd QASA_TABLE7PSD Quarterly Sector Accounts - Public Sector Debt, consolidated, nominal value 2026-08-13 2026-08-02
eurostat ei_mfir_m Interest rates - monthly data 2026-08-13 2026-08-13
eurostat gov_10q_ggdebt Quarterly government debt 2026-08-13 2026-08-12
fred r Interest Rates 2026-08-12 2026-08-12
fred saving Saving - saving 2026-08-12 2026-08-12
gfd debt Debt 2021-08-22 2026-08-01
imf FM Fiscal Monitor (FM) 2026-07-25 2026-08-12
imf GGXCNL_G01_GDP_PT Net lending/borrowing (also referred as overall balance) (% of GDP) 2026-08-12 2026-08-01
imf GGXONLB_G01_GDP_PT Primary net lending/borrowing (also referred as primary balance) (% of GDP) 2026-08-12 2026-08-01
imf GGXWDN_G01_GDP_PT Net debt (% of GDP) 2026-08-12 2026-08-01
imf HPDD NA NA NA
wdi GC.DOD.TOTL.GD.ZS Central government debt, total (% of GDP) 2026-08-12 2026-08-12
wdi GC.XPN.INTP.CN Interest payments (current LCU) 2026-08-12 2026-08-12
wdi GC.XPN.INTP.RV.ZS Interest payments (% of revenue) 2026-08-12 2026-08-12
wdi GC.XPN.INTP.ZS Interest payments (% of expense) 2026-08-12 2026-08-12

LAST_COMPILE

LAST_COMPILE
2026-08-14

Last

TIME_PERIOD Nobs
2025-Q1 12

Layout

  • OECD Website. html

REF_AREA

Code
QASA_TABLE7PSD |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA, Location) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Location))),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

TRANSACTION

Code
QASA_TABLE7PSD |>
  left_join(QASA_TABLE7PSD_var$TRANSACTION, by = "TRANSACTION") |>
  group_by(TRANSACTION, Transaction) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) |>
  print_table_conditional()
TRANSACTION Transaction Nobs
SAFGD Total gross debt 1665

SECTOR

Code
QASA_TABLE7PSD |>
  left_join(QASA_TABLE7PSD_var$SECTOR, by = "SECTOR") |>
  group_by(SECTOR, Sector) |>
  summarise(Nobs = n()) |>
  arrange(-Nobs) |>
  print_table_conditional()
SECTOR Sector Nobs
S1311 NA 570
S13G General government 525
S1311B NA 225
S11001 NA 130
S1ZS NA 115
S12001 NA 100

Biggest Debt in $

PCTGDPA - Percentage of GDP, current prices (Nat. Curr.)

Code
QASA_TABLE7PSD |>
  filter(TRANSACTION == "SAFGD",
         MEASURE == "PCTGDPA") |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA, Location) |>
  summarise(year1 = first(TIME_PERIOD),
            value1 = first(obsValue),
            year2 = last(TIME_PERIOD),
            value2 = last(obsValue)) |>
  arrange(-value2) %>%
  mutate_at(vars(value1, value2), funs(paste0(round(.), " %"))) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Location))),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

CAR - Current prices, annual levels

Code
QASA_TABLE7PSD |>
  filter(TRANSACTION == "SAFGD",
         MEASURE == "CAR") |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA, Location) |>
  summarise(year1 = first(TIME_PERIOD),
            value1 = first(obsValue),
            year2 = last(TIME_PERIOD),
            value2 = last(obsValue)) |>
  arrange(-value2) %>%
  mutate_at(vars(value1, value2), funs(paste0(round(./1000), ""))) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Location))),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

CXCAR - US $, current prices, current exchange rates, annual levels

Code
QASA_TABLE7PSD |>
  filter(TRANSACTION == "SAFGD",
         MEASURE == "CXCAR") |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA, Location) |>
  summarise(year1 = first(TIME_PERIOD),
            value1 = first(obsValue),
            year2 = last(TIME_PERIOD),
            value2 = last(obsValue)) |>
  arrange(-value2) %>%
  mutate_at(vars(value1, value2), funs(paste0("$ ", round(./1000), " Bn"))) |>
  mutate(Flag = gsub(" ", "-", str_to_lower(gsub(" ", "-", Location))),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) |>
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

France, United States

All

Code
QASA_TABLE7PSD |>
  filter(REF_AREA %in% c("FRA", "USA"),
         TRANSACTION == "SAFGD",
         MEASURE == "CXCAR",
         SECTOR == "S13G") |>
  quarter_to_date() |>
  arrange(desc(date)) |>
  mutate(obsValue = obsValue/10^3) |>
  group_by(date) |>
  filter(n() == 2) |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + add_2flags +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1940, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 40000, 2000))

Log

Code
QASA_TABLE7PSD |>
  filter(REF_AREA %in% c("FRA", "USA"),
         TRANSACTION == "SAFGD",
         MEASURE == "CXCAR",
         SECTOR == "S13G") |>
  quarter_to_date() |>
  arrange(desc(date)) |>
  mutate(obsValue = obsValue/10^3) |>
  group_by(date) |>
  filter(n() == 2) |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + add_2flags +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1940, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 40000, 2000))

Japan, United States

Code
QASA_TABLE7PSD |>
  filter(REF_AREA %in% c("USA", "JPN"),
         TRANSACTION == "SAFGD",
         MEASURE == "CXCAR",
         SECTOR == "S13G") |>
  quarter_to_date() |>
  arrange(desc(date)) |>
  mutate(obsValue = obsValue/10^3) |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + add_2flags +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1940, 2100, 5) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 40000, 2000))

France, United Kingdom, Italy, Canada

Code
QASA_TABLE7PSD |>
  filter(REF_AREA %in% c("FRA", "GBR", "ITA", "CAN"),
         TRANSACTION == "SAFGD",
         MEASURE == "CXCAR",
         SECTOR == "S13G") |>
  quarter_to_date() |>
  arrange(desc(date)) |>
  mutate(obsValue = obsValue/10^3) |>
  left_join(QASA_TABLE7PSD_var$LOCATION, by = c("REF_AREA" = "LOCATION")) |>
  group_by(REF_AREA) |>
  group_by(date) |>
  filter(n() == 4) |>
  left_join(colors, by = c("Location" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_color_identity() + add_4flags +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = seq(1940, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 40000, 500))