根据 SAS 上的多个条件创建新标志

问题描述 投票:0回答:1

我正在努力寻找如何创建旗帜。我的数据集如下所示:

CPT    PRODUCT         DATE         A        B           C        D       etc.
1         A            date1        .        .           .        .
1         A            date2        .        .           .        .
1         C            date2        .        .           .        .
1         B            date3        .        .           .        .
1         B            date3        .        .           .        .
2         A            date3        .        .           .        .
2         B            date1        .        .           .        .
2         B            date1        .        .           .        .
2         B            date2        .        .           .        .
2         C            date2        .        .           .        .
etc.

其中cpt(i)代表每个交易对手,product(i)代表每个cpt(i)购买的产品,date(i)代表购买日期,A、B、C、D等是其他分类/数字变量数据集的。我想每次创建一个标志当且仅当有两行或更多行具有相同的 cpt(i)、相同的产品(i) 和相同的日期(i) 时。因此,不应考虑其他列。我想要得到的如下所示:

CPT    PRODUCT         DATE         A        B           C        D       flag
1         A            date1        .        .           .        .        0
1         A            date2        .        .           .        .        0
1         C            date2        .        .           .        .        0  
1         B            date3        .        .           .        .        1
1         B            date3        .        .           .        .        1
2         A            date3        .        .           .        .        0
2         B            date1        .        .           .        .        1
2         B            date1        .        .           .        .        1
2         B            date2        .        .           .        .        0
2         C            date2        .        .           .        .        0
etc.

关于如何获得我想要的东西有什么建议吗?干杯

sas multiple-conditions
1个回答
0
投票

使用

BY
语句。该语句将隐式创建自动标志变量
first.<byvar>
last.<byvar>
。当两个变量都是
=1
时,隐含条件是 by 组包含单行。您正在寻找标记相反的条件(当按组包含多于一行时)。

data want ;
  set have ;
  by cpt product date ;
  flag = not (first.date and last.date) ;
run ;
© www.soinside.com 2019 - 2024. All rights reserved.