我正在尝试创建一个新变量,该变量根据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
答案 0 :(得分:0)
您需要将第一个值存储在一个不会更新的单独变量中。
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;
答案 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;