Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sas根据其他日期填写日期_Sas - Fatal编程技术网

使用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.