SAS:是否可以跨不同的行进行SAS检查?

时间:2017-02-16 15:31:09

标签: sas proc-sql

我的数据如下图所示。我有他们购买的日期,客户名称和不同类别的水果。

Example

我想创建一个新列,计算出已售出多少&#34;双倍出售&#34;发生了。例如,第一次与客户A的互动是在1/15,如果第二次互动是在第一次互动的<7>天内出售水果,我希望它在&中加1 #34;双重销售&#34;柱。

基本上,我希望SAS匹配客户ID,然后下行,并查找第一个日期后7天内的日期。

1 个答案:

答案 0 :(得分:0)

问题:为什么ID=C在您的示例中有DOUBLE_SOLD=1?没有其他ID=C可供比较。在任何情况下,您都希望按ID date排序,然后DATE滞后ID,以便使用简单的逻辑进行比较:

proc sort data = have;
    by ID DATE;
run;

** edit sales to 1/0 **;
data have1; set have;
    array a(3) APPLE ORANGE PEAR;
    do i=1 to dim(a);
        if a(i)>0 then a(i)=1;
    end;
    drop i;
run;

data want; set have1;
    by ID;
    LAG_DATE=lag(DATE);
        if first.ID then LAG_DATE = .;
        if LAG_DATE ne . then do;
            if (DATE-LAG_DATE)<=7 and sum(APPLE,ORANGE,PEAR)>0 then DOUBLE_SOLD=1;
                else if (DATE-LAG_DATE)>7 or sum(APPLE,ORANGE,PEAR)=0 then DOUBLE_SOLD=0;
        end;
        else do;
            if sum(APPLE,ORANGE,PEAR)>1 then DOUBLE_SOLD=1;
                else DOUBLE_SOLD=0;
        end;
    format LAG_DATE mmddyy10.;
run;