使用sas根据其他日期填写日期
我的数据集中有三列:使用sas根据其他日期填写日期,sas,Sas,我的数据集中有三列:ID、Date1和Date2。我需要根据Date2填写列Date1。换句话说,如果Date1较旧,则Date2则Date1将是相同的值 我的原始数据是: ID |Date1 | Date2 84 | |13JAN2015 84 |12NOV2014 |05FEB2015 84 |12NOV2014 |07FEB2015 106 | |13JAN2015 106 |09MAY2014 |05FEB2015 106 |09MAY
ID
、Date1
和Date2
。我需要根据Date2
填写列Date1
。换句话说,如果Date1
较旧,则Date2
则Date1
将是相同的值
我的原始数据是:
ID |Date1 | Date2
84 | |13JAN2015
84 |12NOV2014 |05FEB2015
84 |12NOV2014 |07FEB2015
106 | |13JAN2015
106 |09MAY2014 |05FEB2015
106 |09MAY2014 |07FEB2015
106 |09MAY2014 |09MAR2015
153 |16JAN2015 |08OCT2015
153 |16JAN2015 |12NOV2015
155 | |13JAN2015
155 |01JUN2014 |05FEB2015
155 |25APR2015 |12NOV2015
155 |25APR2015 |28NOV2015
我想得到这个结果:
ID |Date1 | Date2
84 |12NOV2014 |13JAN2015
84 |12NOV2014 |05FEB2015
84 |12NOV2014 |07FEB2015
106 |09MAY2014 |13JAN2015
106 |09MAY2014 |05FEB2015
106 |09MAY2014 |07FEB2015
106 |09MAY2014 |09MAR2015
153 |16JAN2015 |08OCT2015
153 |16JAN2015 |12NOV2015
155 |01JUN2014 |13JAN2015
155 |01JUN2014 |05FEB2015
155 |25APR2015 |12NOV2015
155 |25APR2015 |28NOV2015
假设Date1
是出生日期,Date2
是收集信息的日期,则出生后收集的所有信息(对于相同的ID)必须属于相同的出生日期,从而填补空白
我曾尝试使用IF
语句,但没有成功。
有人可以帮我吗?您可以使用lag()函数,该函数允许您读取数据步循环中上一条记录的值
data have;
infile datalines delimiter='|';
length Date1$10 Date2$10;
input ID Date1 $ Date2 $;
datalines;
84 | |13JAN2015
84 |12NOV2014 |05FEB2015
84 |12NOV2014 |07FEB2015
106 | |13JAN2015
106 |09MAY2014 |05FEB2015
106 |09MAY2014 |07FEB2015
106 |09MAY2014 |09MAR2015
153 |16JAN2015 |08OCT2015
153 |16JAN2015 |12NOV2015
155 | |13JAN2015
155 |01JUN2014 |05FEB2015
155 |25APR2015 |12NOV2015
155 |25APR2015 |28NOV2015
;
run;
*** convert to dates;
data have;
set have;
format d2 d1 Date9.;
*Date1 = COMPRESS( tranwrd(Date1,'/',''),,'s');
d1 = input(Date1,Date9.);
*Date2 = COMPRESS( tranwrd(Date2,'/',''),,'s');
d2 = input(Date2,Date9.);
rename d1=Date1 d2=Date2;
drop Date1 Date2;
run;
*** sort;
proc sort data=have out=want;
by id descending Date2;
run;quit;
*** if missing then fill in previous value;
data want;
set want;
lagDate1=lag(Date1);
if Date1=. then Date1=lagDate1;
drop lagDate1;
run;
*** sort back to normal;
proc sort data=want;
by id Date2;
run;quit;
ID
是否与上一条记录相同
您如何从
Date1=”“
到Date1=“12/nov/14”
获取第一条记录的表格?有些事情你没有说出来,或者例子是错的。(如果您在数据步骤中提供硬编码的数据也会有所帮助。)假设Date1是出生日期,Date2是收集信息日期,则出生后收集的所有信息(对于相同ID)必须属于相同的出生日期,因此,请填写空格。您是否知道此处使用的日期格式的名称?Sas格式:Date9.