SAS / SQL - создайте столбец, в котором будет показано, сколько раз произошло значение - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть таблица с номером счета и несколькими атрибутами.

acct |attr1 |attr2 |attr3 ...

Проблема в том, что в списке есть дубликаты номеров счетов с разными атрибутами.Что еще хуже, когда есть две записи номера счета, эти записи могут иметь совершенно разные атрибуты.

У меня есть схема сортировки, чтобы решить проблему, но после сортировки таблицы мне нужно только первое вхождение каждого номера счета.Я пытаюсь сделать это в SAS с помощью Proc SQL.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

proc sort - это самый простой способ сделать это.Вы можете использовать недокументированную функцию monotonic (), чтобы сделать это в Proc sql, как показано ниже

data have;
input acct attr1 $ attr2 $ attr3 $;
datalines;
100 a b c
100 b d e
100 c e f
101 a b c
102 h i j
102 h k l
 ;

proc sql;
create table want(drop =rn) as 
select * from 
(select b.*,monotonic() as rn
 from have b)
group by acct
having rn =min(rn);

или используя n в шаге данных (создание представления является хорошим вариантом, как предложено @richardв комментариях) с последующей группировкой, как показано ниже.

data have_view/view=have_view;;
set have;
rn=_n_;
run; 

proc sql;
create table want as 
select acct, attr1 , attr2 , attr3
from have_view b
group by acct
having rn =min(rn);
0 голосов
/ 21 сентября 2018

Я не думаю, что это возможно сделать с PROC SQL, однако в логике DATA STEP это возможно.

После сортировки данных используйте first. (произносится как первая точка)логика для выбора первого вхождения:

Сначала отсортируйте данные, используя желаемую схему.

proc sort data=have out=intermediate_table;
  by acct <other variables>;
run;

Затем просто используйте first.acct:

data want;
  set intermediate_table;
  by acct <other variables>;
  if first.acct then output;
run;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...