0

我的 SAS 数据集中有 4 列,如下图所示。我需要按 ID 比较连续行的日期。对于每个 ID,如果同一 ID 的 Date2 出现在下一行的 Date1 之前,则保留账单金额。如果 Date2 出现在下一行的 Date1 之后,则删除账单金额。所以对于每个 ID,只保留 Date2 小于下一行 Date1 的账单。我已将结果集的外观放在底部。

在此处输入图像描述

结果集应如下所示
在此处输入图像描述

4

2 回答 2

1

您需要创建一个新变量,将下一行的 DATE1 上移一行以进行比较。假设您的日期变量采用日期格式,请使用PROC EXPAND并进行比较,确保您没有比较最后一个缺少 LEAD 值的值:

DATA TEST;
    INPUT ID: $3. DATE1: MMDDYY10. DATE2: MMDDYY10. BILL: 8.;
    FORMAT DATE1 DATE2 MMDDYY10.;
    DATALINES;
    AA      07/23/2015      07/31/2015  34
    AA      07/30/2015      08/10/2015  50
    AA      08/12/2015      08/15/2015  18
    BB      07/23/2015      07/24/2015  20  
    BB      07/30/2015      08/08/2015  20
    BB      08/06/2015      08/08/2015  20
    ;
RUN;

PROC EXPAND DATA = TEST OUT=TEST1 METHOD=NONE;
    BY ID;
    CONVERT DATE1 = DATE1_LEAD / TRANSFORMOUT=(LEAD 1);
RUN;

DATA TEST2; SET TEST1;
    IF DATE1_LEAD NE . AND DATE2 GT DATE1_LEAD THEN BILL=.;
RUN;
于 2016-02-24T18:48:52.993 回答
1

如果您对数据进行排序,以便查看以前的 obs 来比较您的日期,则可以在 DATA STEP 中使用LAG 函数。

于 2016-02-24T19:27:16.713 回答