91³Ô¹ÏÍø

Watch CBS News

Biden's last prostate cancer blood test was in 2014, spokesperson says

Former President Joe Biden received his last known blood test to check for prostate cancer in 2014, a spokesperson said Tuesday — two days after Biden revealed he has an aggressive form of prostate cancer.

"Prior to Friday, President Biden had never been diagnosed with prostate cancer," the spokesperson added.

Biden turned 72 in 2014, putting him toward the end of the typical age range for prostate cancer screenings. Doctors generally recommend halting routine testing after the age of 70 or 75 because prostate cancer is often slow-growing in older men, and the risks of testing and treatment can outweigh the benefits, CBS News medical contributor Dr. Céline Gounder says.

President Trump on Monday speculated about how long Biden may have had cancer, saying he's "surprised" that "the public wasn't notified a long time ago."

The spokesperson said Biden's 2014 exam — administered when he was vice president — was a prostate specific antigen test, a type of blood test. It's one of two forms of prostate cancer screening, along with a digital rectal exam conducted by a doctor.

Biden in early 2024, during the last year of his presidency. A released at the time by his physician, Dr. Kevin O'Connor, did not mention testing for prostate cancer, and described him as generally healthy.

In 2019, Biden was diagnosed with benign enlargement of the prostate, a that affects about 80% of men over 70.

The former president was diagnosed with an "aggressive" form of prostate cancer on Friday, his office said Sunday. He was evaluated after a "small nodule" was found in his prostate during a routine exam, his team disclosed earlier this month.

Biden's office said his cancer has a Gleason score of 9 — the second-highest value on the prostate cancer grading system — "with metastasis to the bone." The statement added that "the cancer appears to be hormone-sensitive which allows for effective management."

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=50747257b890e014813016b79ece0fb2'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });