SAS等效于rleid函数

时间:2018-09-28 16:10:07

标签: sas grouping

R包public void another() { int a[][] = new int[][] { {-1, 2, 3, -4}, {-3, 5, 6, -8}, {-9, 2, 3, -1}, {-7, 2, 3, -9}}; System.out.println(Arrays.deepToString(a)); int sum = 0; int min = 0; int min_j = 0; int kol = 0, firstNeg_i = 0, nextNeg_i = 0; int firstNeg_j = 0, nextNeg_j = 0; if (a[0][0] < 0) { kol++; firstNeg_i = 0; firstNeg_j = 0; } for (int i = 1; i < a.length; i++) { for(int j = 1; j < a.length; j++) { if (a[min][min_j] > a[i][j]) { min = i; min_j = j; } if ((a[i][j] < 0) && kol < 1) { firstNeg_i = i; firstNeg_j = j; kol++; i++; j++; } if ((a[i][j] < 0) && kol < 2) { nextNeg_i = i; nextNeg_j = j; kol++; } } } for (int i = firstNeg_i + 1; i < nextNeg_i; i++) { for (int j = firstNeg_j + 1; j < nextNeg_j; j++) { sum += a[i][j]; //System.out.println(sum); } } System.out.println(sum); } 具有函数data.table,该函数为向量的每个元素分配一个整数,而相邻的相同值元素将获得相同的整数。希望R中的这个示例可以解释rleid的作用,这里的rleidy

rleid(x)

在SAS中为以下数据集创建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与R示例相同)

x

3 个答案:

答案 0 :(得分:4)

只需将BY语句与NOTSORTED选项一起使用。

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

答案 1 :(得分:3)

您可以在此处使用BY组处理来添加计数器。 “按组”有一个称为“未分类”的选项,可让您考虑不合逻辑顺序的组。

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/

答案 2 :(得分:1)

另一种方法。

  data b;
  set ex;
  if lag(x)=x then count+0;
  else count+1;
  run;