SAS,如何通过行运行索引的“Do”循环?

时间:2017-02-18 04:59:07

标签: sas

我有以下表格的数据

ID  BookingDate  Releasedate
1     1/1/11        1/3/14
2     3/3/12         1/4/17
.
.
.

(ID是字符变量)

数据以这种方式继续。

我要做的是构建一个循环如下:

 If id(i) = id(i+1) AND 
    BookingDate(i) = Bookingdate(i+1) AND
    Releasedate(i) NE  ReleaseDate(i+1)
      Then
       Releasedate(i) = Max(ReleaseDate(i), Releasedate(i+1))
    Else
        Releasedate(i) = Releasedate(i)

这将是i = 1到(行数)

注意,我的语法是伪造的。

我读过的关于数组的所有内容看起来都像逐行一样在列上运行。

谢谢!

1 个答案:

答案 0 :(得分:1)

使用RETAIN和LAG查找以前的值。 没有机会进行测试,但相当肯定这会有效。你可以简化MAX条件。

 Data want;
 Set have;

 Retain Latest_RDate;

 Prev_id = lag(Id);    
 Prev_bdate = lag(bookingdate);
 Prev_rdate = lag(ReleaseDate);

 If Id = (prev_Id + 1) and bookingDate = (prev_bdate + 1) and 
      ReleaseDate ne (Prev_RDate + 1) then  Latest_Rdate = max(releasedate, prev_Rdate, Latest_Rdate);
  Else latest_Rdate = RealeaseDate;

  Run;