SAS - 考虑到失踪,如何保持最早的日期

时间:2017-03-01 15:15:09

标签: sas

需要创建一个新变量来重复ID访问的最早日期,如果缺少它,则应该输入缺失,丢失后应该保留最早的日期(如示例中所示)。我已经尝试过LAG功能但它没有工作;我也尝试保持功能但只重复所有记录的25NOV2015。最后的结果/"我需要什么"在最后一栏。

谢谢

Example

2 个答案:

答案 0 :(得分:0)

您需要使用retain声明。保留意味着您在每次观察中的价值都不会被重新初始化为失踪。因此,在下一次数据步骤迭代中,您的变量会记住它的值。

示例数据

data a;
    input date;
    format date ddmmyy10.;
datalines;
.
5
6
7
.
1
2
.
9
;
run;

<强>解决方案

data b;
    set a;

    retain new_date;
    format new_date ddmmyy10.;

    if date = . then
        new_date = .;

    if new_date = . then
        new_date = date;
run;

答案 1 :(得分:0)

由于你没有发布任何数据我将弥补一些。此外,由于你的变量是一个日期的事实并没有真正影响答案我只会使用一些整数,因为它们更容易输入。

data have ;
  input id value @@ ;
cards;
1 . 1 2 1 3 1 . 1 5 1 6 1 . 1 8
2 1 2 2 2 3 2 . 2 5 2 6
;;;;

基本上,您的算法表示您希望在缺少当前值或缺少存储值时存储该值。对于多个BY组,您还需要在启动新组时进行设置。

data want ;
 set have ;
 by id ;
 retain new_value ;
 if first.id or missing(new_value) or missing(value)
  then new_value=value;
run;

结果:

                       new_
Obs    id    value    value

  1     1      .        .
  2     1      2        2
  3     1      3        2
  4     1      .        .
  5     1      5        5
  6     1      6        5
  7     1      .        .
  8     1      8        8
  9     2      1        1
 10     2      2        1
 11     2      3        1
 12     2      .        .
 13     2      5        5
 14     2      6        5