Давайте создадим наш источник данных практики:
DATA MY_CREDIT_CARDS;
INPUT
C_NUMBER
TRANC_AMOUNT
TRANSC_DATE :DATE10.
TRANSC_CODE
MERCH_CODE
MERCH_NAME $10.;
FORMAT TRANSC_DATE DDMMYY10.;
CARDS;
1 100 17JAN1990 1 1 AMAZON
2 200 01JAN1990 2 8 WALLMART
4 100 04JAN1990 3 5 CRUSTYKRAB
2 200 07JAN1990 4 7 NETFLIX
1 300 01JAN1990 5 2 GOOGLEPLAY
3 200 17JAN1990 6 8 WALLMART
5 100 18JAN1990 7 2 GOOG.PLAY
5 300 19JAN1990 8 2 GOOGLEPLAY
2 200 22JAN1990 9 8 WALLMART
4 200 20JAN1990 10 2 GOOGLEPLAY
1 100 03JAN1990 11 2 GOOG.PLAY
1 100 17JAN1990 12 1 AMZN
;
RUN;
Результат:
Теперь, прежде всего, я рекомендуюне использовать в качестве ключей описательные поля, такие как имена (в данном случае имя продавца), поскольку описательные поля могут быть очень переменными, т. е. кто-то может зарегистрировать AMAZON в качестве AMZN или AMAZN или любую комбинацию, которую вы можете представить в качестве имени продавца. Вместо этого используйте поля ID. Итак, предполагая, что код продавца является уникальным идентификатором, я думаю, что этого достаточно для идентификации продавца.
Учитывая вышеизложенное, используя PROC SQL , вы можете сделать что-то подобное, чтобы найти дубликаты на основеПравило, которое вы предоставляете (и без необходимости использования какого-либо другого дополнительного шага):
PROC SQL;
/*The following assuming each record are unique
(identified by 'transaction code' in this case),
otherwise you must handle duplicate records properly.*/
SELECT
DISTINCT A.*,
CASE WHEN
B.TRANSC_CODE IS NOT NULL
THEN 1 ELSE 0 END AS DUPLICATED
FROM MY_CREDIT_CARDS AS A
LEFT JOIN MY_CREDIT_CARDS AS B
ON
A.MERCH_CODE = B.MERCH_CODE AND
A.TRANC_AMOUNT = B.TRANC_AMOUNT AND
A.TRANSC_CODE ^= B.TRANSC_CODE AND
A.TRANSC_DATE >= INTNX('day',B.TRANSC_DATE,-5) AND
A.TRANSC_DATE <= INTNX('day',B.TRANSC_DATE,5)
;
/*You could use an ORDER BY clause to sort the
results as you want.*/
RUN;
Результат будет:
Теперь у вас есть новый столбец с именем «DUPLICATED», показывающий 1, если найдено значение как дублированное, и 0, если нет.
Надеюсь, это поможет.