尽管使用了distinct,但在SAS中却获得重复值,如何删除它们?

时间:2018-10-15 22:55:33

标签: sql sas enterprise-guide

OUTPUT OF CODE PROGRAM(追加两个表并将其存储在后一个表中):

proc sql;
   create table tdstagng.aa as
   select distinct * from tdstagng.aa
   outer union corr
   select distinct * from WORK.DYNAMIC
   ORDER by Cdate;`
quit;

输出

此图像是代码的输出,Cdate是获取当前日期的列。)该程序的目标是建立历史数据以标记随时间的变化。

在日期10/15/18中,即使整行都是相同的,也存在重复的值(而不是该日期的7行,而是14行),如何消除呢?我用箭头标记了重复的行。

3 个答案:

答案 0 :(得分:1)

您选择了两个不同的集合,然后将它们串联在一起,而不仅仅是将它们结合在一起。这就是导致重复行的原因。

您是否尝试删除了outer关键字?这是使用SASHELP.CLASS数据的示例。

23   proc sql ;
24   create table test1 as
25   select * from sashelp.class where name like 'A%'
26   union corr
27   select * from sashelp.class where sex = 'F'
28   ;
NOTE: Table WORK.TEST1 created, with 10 rows and 5 columns.

29   create table test2 as
30   select * from sashelp.class where name like 'A%'
31   outer union corr
32   select * from sashelp.class where sex = 'F'
33   ;
NOTE: Table WORK.TEST2 created, with 11 rows and 5 columns.

还是进行子查询?

45
46   create table test3 as
47   select distinct * from
48   (
49   select * from sashelp.class where name like 'A%'
50   outer union corr
51   select * from sashelp.class where sex = 'F'
52   )
53   ;
NOTE: Table WORK.TEST3 created, with 10 rows and 5 columns.

答案 1 :(得分:0)

proc sql;
   create table tdstagng.aa as
   select distinct * from tdstagng.aa
   union
   select distinct * from WORK.DYNAMIC
   ORDER by Cdate;
quit;

尝试删除外部和CORR。

答案 2 :(得分:0)

CDate列中的日期格式是什么? 可能是由于DD / MM / YYYY HH:MM格式-原始日期值中隐藏了时间;

在这种情况下,您可以使用函数datepart(CDate)定义计算列-它仅保留datetime值之外的日期