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

如何在SAS数据集中按行计算指定列的最小、最大日期及日期差

SAS行内日期极值计算与差值求解方案

给定如下SAS数据集:

data have;
input subjid  var1$ var2$ var3$ var4$ var5$ var6$;
datalines;
121 23jan2022 24jan2022 20jan2022  24jan2022 26jan2022 25jan2022 
122 20jan2022 22jan2022 26jan2022  28jan2022 23jan2022 27jan2022 
;
run;

需求为:按行计算var1至var3的最小日期、var4至var6的最大日期,再求两个日期的天数差值(第一行预期差值为6天)。

解决方案代码

data want;
    set have;
    /* 定义数组存储待处理的字符型日期变量 */
    array char_dates1[3] $ var1-var3;
    array char_dates2[3] $ var4-var6;
    /* 临时数组存储转换后的SAS日期型变量,不保留到输出数据集 */
    array sas_dates1[3] _temporary_;
    array sas_dates2[3] _temporary_;
    
    /* 将字符日期转换为SAS数值型日期(date9.格式匹配输入的DDMONYYYY格式) */
    do i = 1 to 3;
        sas_dates1[i] = input(char_dates1[i], date9.);
        sas_dates2[i] = input(char_dates2[i], date9.);
    end;
    
    /* 计算两组日期的极值 */
    min_date = min(of sas_dates1[*]);
    max_date = max(of sas_dates2[*]);
    /* 计算天数差值:SAS日期为数值型,直接相减得到天数 */
    date_diff = max_date - min_date;
    
    /* 格式化日期变量为可读格式 */
    format min_date max_date date9.;
    drop i;
run;

代码说明

  • 日期转换:使用input()函数将字符型日期转为SAS内部数值型日期(date9.格式适配输入的DDMONYYYY格式)
  • 数组处理:通过数组批量处理多列变量,避免重复编写转换逻辑,提升代码简洁性
  • 极值计算:min(of sas_dates1[*])和max(of sas_dates2[*])直接对数组内所有元素求极值,无需逐行判断
  • 差值计算:SAS日期以"天"为单位存储为数值,直接相减即可得到天数差

验证结果

  • 第一行:min_date=20JAN2022,max_date=26JAN2022,date_diff=6(符合预期)
  • 第二行:min_date=20JAN2022,max_date=28JAN2022,date_diff=8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:45:28