在SAS中使用SQL,我如何创建一个新列来计算/指示现有列中值的唯一性。

时间:2019-06-18 19:15:38

标签: sql sas counting

我的数据如下:

ID
1
2
3
3
4
5
6
6

我想创建一个列,以指示ID列中值的唯一性,例如:

ID  COUNT
1   1
2   1
3   1
3   0
4   1
5   1
6   1
6   0

我想不通过子查询或其他方式创建临时表来执行此操作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

一种选择是在数据步骤中按功能使用:

data have;
input ID;
datalines;
1
2
3
3
4
5
6
6
;run;

data want;
set have;
by ID;
if first.ID then count = 1;
else count = 0;
run;

答案 1 :(得分:0)

这种类型的逻辑实际上并不适合SQL,因为观察顺序并没有真正得到保证。在更现代的SQL版本中,您可以使用窗口函数(例如ROW_NUMBER()和PARTITION BY)来施加记录计数。

如果您真的想尝试仅在PROC SQL中进行操作,则可能需要使用未公开的MONOTONIC()函数。但是,即使这样,要使优化程序消除消除重复行的行为,您可能仍需要先使用行计数器创建一个临时表。

data have;
  input ID @@;
datalines;
1 2 3 3 4 5 6 6
;

proc sql ;
  create table _temp_ as select id,monotonic() as row from have;
  create table want as
    select a.id
         , b.row=min(b.row) as FLAG
    from have a,_temp_ b
    where a.id=b.id
    group by a.id
    order by 1,2
  ;
quit;