我的数据如下:
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
我想不通过子查询或其他方式创建临时表来执行此操作。任何帮助将不胜感激。
答案 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;