Используя SQL в SAS, как мне создать новый столбец, который подсчитывает / указывает уникальность значений в существующем столбце ..? - PullRequest
0 голосов
/ 18 июня 2019

Мои данные следующие:

ID
1
2
3
3
4
5
6
6

Я хочу создать столбец, который указывает уникальность значения в столбце идентификатора как такового:

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

Я бы хотел сделать это без создания временной таблицы, с помощью подзапроса или чего-то еще. Любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Одним из вариантов будет использование функциональности на шаге данных:

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;
0 голосов
/ 18 июня 2019

Этот тип логики на самом деле не поддается 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;
...