Как я могу избежать дублирования в дополнении pro c, даже если я запустил его дважды? - PullRequest
0 голосов
/ 07 августа 2020

Я не могу просто удалить дублирование из моей базовой таблицы, потому что у меня есть столбец DATETIME, поэтому он не будет считаться дублированием.

Пример: base (после первого добавления):

+------+----------------------------+------+-----+
| name | date                       |  id  |year |  
+------+----------------------------+------+-----+
|    X |Thursday06july2020 16:21:06 |   303| 2019| 
|    Y |Thursday06july2020 16:21:06 |   91 | 2020|  
+------+----------------------------+------+-----+

после внесения некоторых изменений в мою таблицу данных у меня будет это в:

+------+----------------------------+------+-----+
| name | date                       |  id  |year |  
+------+----------------------------+------+-----+
|    W |Friday07August2020 13:27:15 |  92  | 2019|
|    X |Friday07August2020 13:27:15 |  303 | 2019| 
|    Y |Friday07August2020 13:27:15 |  91  | 2020|  
|    Z |Friday07August2020 13:27:15 |  45  | 2020|
+------+----------------------------+------+-----+

, тогда я хочу повторно запустить добавление pro c. Есть ли способ сравнить все столбцы, кроме столбца даты? Я знаю sh, что это достаточно ясно.

1 Ответ

4 голосов
/ 07 августа 2020

Создайте первичный ключ для всех ваших столбцов, кроме даты в вашей базовой таблице. Например:

data basetable;
    length pk $50.;
    set basetable;
 
    pk = cats(name, id, year);
run;

Вы можете использовать это для обновления значений и столбцов в ваших данных.

Чтобы продолжить использование proc append, вы можете создать ограничение целостности для pk, которое предотвращает дубликаты в вашей базовой таблице.

proc datasets lib=mylib nolist;
    modify basetable;
        ic create unique (pk);
quit;

Это ограничение целостности будет уничтожено, если вы воссоздадите таблицу.

...