You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS计算两个日期间隔天数出现缺失值的问题求助

解决SAS中字符型日期计算天数间隔返回缺失值的问题

问题根源

FORMAT语句仅用于设置变量的显示格式,不会改变变量的类型。你的Start_date和End_date是字符型变量,而INTCK函数需要的是SAS日期值(数值型,本质是从1960年1月1日起累计的天数),直接传入字符型变量会导致计算失败,返回缺失值(.)。

解决方案

必须先用INPUT函数将字符型日期转换为SAS日期值,再进行天数计算。以下是两种可行的代码实现:

方案1:保留原字符型日期变量,创建新的日期型变量

适合需要保留原始字符数据的场景:

DATA Dataset;
    set Dataset;
    /* 将字符日期转换为SAS日期值,MMDDYY10.匹配"月/日/4位年"格式 */
    Start_date_num = INPUT(Start_date, MMDDYY10.);
    End_date_num = INPUT(End_date, MMDDYY10.);
    /* 设置日期显示格式,让数值型日期以易读形式展示 */
    FORMAT Start_date_num End_date_num mmddyy10.;
    /* 计算两个日期之间的天数间隔 */
    Days = INTCK('day', Start_date_num, End_date_num);
    /* 若需要包含首尾日期的总天数,可替换为:Days = End_date_num - Start_date_num + 1; */
run;

Proc print data=Dataset;
run;

方案2:直接将原字符变量转换为日期型变量

若不需要保留原始字符日期,可直接覆盖原变量:

DATA Dataset;
    set Dataset;
    /* 直接转换原字符变量为SAS日期值 */
    Start_date = INPUT(Start_date, MMDDYY10.);
    End_date = INPUT(End_date, MMDDYY10.);
    /* 设置显示格式 */
    FORMAT Start_date End_date mmddyy10.;
    /* 计算天数间隔 */
    Days = INTCK('day', Start_date, End_date);
run;

Proc print data=Dataset;
run;

关键说明

  • INPUT(字符变量, 输入格式):核心转换函数,输入格式必须与字符日期的格式完全匹配。你的原始日期是7/5/2020(4位年份),因此使用MMDDYY10.;若日期是7/5/20(2位年份),则用MMDDYY8.。
  • INTCK('day', 开始日期, 结束日期):计算两个日期之间的天数间隔(不含结束日);若需要包含结束日的总天数,直接用结束日期值 - 开始日期值 + 1即可。

内容的提问来源于stack exchange,提问作者Prototype51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:40:35