SAS-эквивалент функции rleid - PullRequest
0 голосов
/ 28 сентября 2018

Пакет R data.table имеет функцию rleid, которая присваивает целое число каждому элементу вектора, причем смежные элементы с одинаковыми значениями получают одно и то же целое число.Надеюсь, этот пример в R объясняет, что делает rleid, здесь y равно rleid(x).

library(data.table)
ex <- data.frame(x = c(1, 1, 4, 4, 1, 3, 3, 4, 4, 4, 1))
ex$y <- rleid(ex$x)
print(ex)

#    x y
# 1  1 1
# 2  1 1
# 3  4 2
# 4  4 2
# 5  1 3
# 6  3 4
# 7  3 4
# 8  4 5
# 9  4 5
# 10 4 5
# 11 1 6

Каков наилучший способ создания y в SAS для указанного ниже набора данных?(Здесь x совпадает с примером R)

data ex;
input x;
cards;
1
1
4
4
1
3
3
4
4
4
1
;
run;

Ответы [ 3 ]

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

Вы можете использовать обработку группы BY здесь, чтобы добавить счетчики.Группа BY имеет опцию NOTSORTED, которая позволяет вам рассматривать группы, которые имеют логический порядок.

data want;
    set ex;
    by x notsorted;
    if first.x then count+1;
run;

https://stats.idre.ucla.edu/sas/faq/how-can-i-create-an-enumeration-variable-by-groups/

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

еще один способ сделать это.

  data b;
  set ex;
  if lag(x)=x then count+0;
  else count+1;
  run;
0 голосов
/ 28 сентября 2018

Просто используйте оператор BY с параметром NOTSORTED.

data want ;
  set have ;
  by x notsorted ;
  y + first.x ;
run;
...