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



我正在尝试创建一个新变量,该变量根据 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

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

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;

你在这里很接近。引用first.datevar时,结果值将为 1 或 0(即真或假(。相反,您需要retain第一个日期变量。

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;

最新更新