我正在努力寻找如何创建旗帜。我的数据集如下所示:
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.
关于如何获得我想要的东西有什么建议吗?干杯
使用
BY
语句。该语句将隐式创建自动标志变量 first.<byvar>
和 last.<byvar>
。当两个变量都是 =1
时,隐含条件是 by 组包含单行。您正在寻找标记相反的条件(当按组包含多于一行时)。
data want ;
set have ;
by cpt product date ;
flag = not (first.date and last.date) ;
run ;