这可能是一个愚蠢的问题,但我在这个问题上遇到了困难。 我有类似
的数据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循环或宏变量)来做到这一点?
感谢。
答案 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;
使用哈希散列存在更复杂的方法(如果你想了解更多,请搜索它)。