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
相关产品推荐
相关产品推荐

