创建一个新的SAS变量,该变量按ID变量的第一个日期递增

时间:2019-03-29 18:44:05

标签: sas

我正在尝试创建一个新变量,该变量根据SAS中ID变量的第一个日期递增几天。

我一直在尝试使用intck,但无济于事。下面是我的代码:

DATA want;
    SET have;
    LENGTH NEWVAR 8.;
    by IDVAR DATEVAR;
    RETAIN NEWVAR ;

    if first.IDVAR then newvar =0 ;

     if first.DATEVAR then NEWVAR = intck('day',first.DATEVAR,'continuous')+1;

  RUN;

这是我要创建的数据集:

IDVAR   DATEVAR NEWVAR
1   1-Jan-18    1
1   2-Jan-18    2
1   5-Jan-18    5
1   6-Jan-18    6
1   1-Feb-18    32
1   3-Feb-18    34
2   2-Jan-18    1
2   3-Jan-18    2

2 个答案:

答案 0 :(得分:0)

您需要将第一个值存储在一个不会更新的单独变量中。 FIRST.<var>是一个特殊的标志变量,将为01。它不采用变量的值。

DATA want;
    SET have;
    LENGTH NEWVAR 8.;
    by IDVAR DATEVAR;

    RETAIN first_date_for_id ;

    if first.IDVAR then first_date_for_id = datevar ;

    NEWVAR = intck('day',datevar, first_date_for_id,'continuous')+1;
    label newvar = 'Days since id started';

    drop first_date_for_id;
  RUN;

答案 1 :(得分:0)

您在这里很近。引用first.datevar时,结果值为1或0(即true或false)。相反,您需要retain第一个datevar。

DATA want;
SET have;
LENGTH NEWVAR 8.;
by IDVAR DATEVAR;
RETAIN firstdate;

if first.IDVAR then do;
    firstdate = datevar;
end;     

NEWVAR = intck('day',firstdate,datevar)+1;

RUN;