【问题标题】:How to find min and max date across columns in SAS data set?如何在 SAS 数据集中的列中查找最小和最大日期?
【发布时间】:2022-08-20 05:47:42
【问题描述】:

我有以下类型的数据集

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;

如何找到var1var3 的所有行中的最小日期和var4var6 的最大日期,然后找到最大日期和最小日期之间的差异。

预期的结果是

在第一行,626jan2022 (this is max of var4-var6)20jan2022 (this is min date of var1-var3) 的区别

任何帮助表示赞赏。

  • 你可能想回顾Why not upload images of code/errors when asking a question?(例如。,\“图像只能用于说明问题 不能用其他方式说清楚, 例如提供用户界面的屏幕截图。\".它也涵盖了程序输入。
  • 如果要将变量视为日期,为什么要将它们定义为字符串?
  • 如果这些是 SAS 日期,请使用 RANGE 函数。 diff = range(of var1-var6);

标签: date sas max minimum


【解决方案1】:

如果变量是实际日期值。

data have;
  input subjid $  (var1-var6) (:date.);
  format var1-var6 date9.;
datalines;
121 23jan2022 24jan2022 20jan2022  24jan2022 26jan2022 25jan2022 
122 20jan2022 22jan2022 26jan2022  28jan2022 23jan2022 27jan2022 
;

然后只需使用 MIN() 和 MAX() 函数来查找最小和最大日期。一旦你有了这些简单的减法,就会发现差异(日期范围)。

data want;
  set have;
  mindate = min(of var1-var3);
  maxdate = max(of var4-var6);
  diff = maxdate-mindate;
  format mindate maxdate date9.;
run;

结果

【讨论】:

    【解决方案2】:

    你可以试试这个:

    data have;
        length subjid $3. var1 $9. var2 $9. var3 $9. var4 $9. var5 $9. var6 $9.;
        input subjid $ var1 $ var2 $ var3 $ var4 $ var5 $ var6 $;
    datalines;
    121 23jan2022 24jan2022 20jan2022 24jan2022 26jan2022 25jan2022 
    122 20jan2022 22jan2022 26jan2022 28jan2022 23jan2022 27jan2022 
    ;
    run;
    
    data want;
        set have;
        array var {*} var1 var2 var3 var4 var5 var6;
        array _var {*} _var1 _var2 _var3 _var4 _var5 _var6;
    
        do i=1 to dim(var);
            _var{i}=input(var{i}, date9.);
            if _var{i}=min(_var1, _var2, _var3) then var_min=var{i};
            if _var{i}=max(_var4, _var5, _var6) then var_max=var{i};
        end;
        var_diff=max(_var4, _var5, _var6)-min(_var1, _var2, _var3);
    
        format _var1 _var2 _var3 _var4 _var5 _var6 YYMMDD10.;
        drop i;
    run;
    

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多