如何在SAS中创建每年从给定日期到今天的日期?

时间:2016-11-20 14:27:11

标签: sql sas

例如,日期为07/04/1992,今天的日期为2016年11月20日。

我想输出表应该是

07/04/1992
07/04/1993
07/04/1994
07/04/1995
07/04/1996
.
.
.
.
07/04/2016

请帮助我在SAS中获取此信息。

3 个答案:

答案 0 :(得分:1)

只需在DO语句周围使用OUTPUT循环即可。

假设您有一个带有变量DOB的输入数据集,并且您想要创建新变量DATE并从DOB到现在每天生成一个观察值。

data want ;
  set have ;
  do date = dob to today();
    output;
  end;
  format date date9.;
run;

如果要按YEAR或任何其他间隔递增,请使用索引变量和INTNX()函数。

data want ;
  set have ;
  do i=0 by 1 until( intnx('year',dob,i+1) > today());
    date = intnx('year',dob,i);
    output;
  end;
  format date date9.;
  drop i;
run;

答案 1 :(得分:0)

处理日期的最简单方法是将它们视为处理日期并使用日期函数。这个版本避免了闰年的陷阱,但(为简单起见)并没有解决2月29日出生的人。

data want;
    format birth_date mmddyy.;

    dob = mdy(4,7,1992);
    birth_day   = day(dob);
    birth_month = month(dob);
    birth_year  = year(dob);

    end_year = year(today());
    if month(today()) <= month(dob) & day(today()) < day(dob) then
        end_year = end_year - 1;

    do year = birth_year to end_year;
        birth_date = mdy(birth_month,birth_day,year);
        output;
    end;
run;

答案 2 :(得分:0)

如果你在这个例子中尝试INTNX和SAMEDAY:

data have;
   infile cards;
   format date1 ddmmyy10.;
   input date1 ddmmyy10.;
   cards;
07/04/2016
;
run;

data _null_;
format date2 ddmmyy10.;
set have;
 date2=intnx('year',date1,-1,"sameday");
 put date2;
run;

查看日志中的结果。 然后,您可以循环将“-1”更改为“-2”......依此类推。

希望这有帮助!