【问题标题】:How can i avoid duplication in a proc append even if i run it twice?即使我运行两次,如何避免在 proc append 中重复?
【发布时间】:2020-11-27 18:59:17
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sas macros append proc


    【解决方案1】:

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

    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;
    

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

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 2017-09-27
      • 2016-02-22
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2018-12-01
      相关资源
      最近更新 更多