即使我 运行 它两次,我如何避免在 proc append 中重复?

How can i avoid duplication in a proc append even if i run it twice?

我不能只从我的基础中删除重复项 table 因为我有一个 DATETIME 列所以它不会被视为重复项。

例子: 基础(第一次追加后):

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

对我的数据进行一些修改后 table 我将在 :

+------+----------------------------+------+-----+
| 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|
+------+----------------------------+------+-----+

然后我想重新执行 proc 追加。 有什么方法可以比较日期列之外的所有列吗? 我希望它足够清楚。

在除基础 table 中的日期之外的所有列上创建主键。例如:

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

您可以使用它来更新数据中的值和列。

要继续使用 proc append,您可以在 pk 上创建完整性约束,以防止在您的基础 table.

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

如果重新创建 table,此完整性约束将被破坏。