按组分组数据

时间:2017-08-04 17:22:33

标签: sas sas-macro

这可能是一个愚蠢的问题,但我在这个问题上遇到了困难。 我有类似

的数据
animal firstcharacter
mouse  m
dog    d
cat    c
monkey m
donkey d

我想将这个“原始”数据分成几个基于第一个字符的数据集。

在这个例子中,我应该有3组(c,d,m)。

如果我逐一这样做,这很容易:

data new_c; set original; if firstcharacter = "c" then; run;
data new_d; set original; if firstcharacter = "d" then; run;
data new_m; set original; if firstcharacter = "m" then; run;

问题是,我在实际数据中有数百个这样的组。 是否有一种简单的方法(使用do循环或宏变量)来做到这一点?

感谢。

1 个答案:

答案 0 :(得分:0)

使用哈希表非常容易。这是“容易的”。版本,需要排序但不需要散列哈希或任何实际管理。

data have;
input animal $ firstcharacter $;
datalines;
mouse  m
dog    d
cat    c
monkey m
donkey d
;;;;
run;

proc sort data=have;  
  by firstcharacter;
run;

data _null_;
  set have;
  by firstcharacter;
  if _n_=1 then do;
    declare hash h;
  end;

  if first.firstcharacter then do;
    h = _new_ hash();
    h.defineKey('animal');
    h.defineData('animal','firstcharacter');
    h.defineDone();
  end;

  rc = h.add();

  if last.firstcharacter then do;
    rc = h.output(dataset:cats('new_',firstcharacter));
  end;
run;

使用哈希散列存在更复杂的方法(如果你想了解更多,请搜索它)。