SAS中数值变量的cotegorization

时间:2017-01-12 17:38:37

标签: sas percentile categorization

我想找到构建另一个变量的方法(即使在同一个数据集中也可以),即旧变量的分类。我会选择桶的数量(例如,使用百分位作为截止值的例子:p10, p20, p30等)。 现在我用proc univariate来提取变量的百分位数。但这只给我百分位数(我的截止值),然后我必须使用百分位数手动构建新变量。 如何创建这个新变量,将截止值和桶数作为输入?

提前致谢

1 个答案:

答案 0 :(得分:0)

假设你想要相同百分比大小的存储桶,那么df_result= Name1 Name2 Date place pet Value1 Value2 Value3 0 Jim Al 2015-09-28 work cat 3 9 12 1 Rick Sarah 2015-09-28 home cat 24 11 4 2 Gary Sasha 2015-09-28 home cat 16 11 14 3 Tom Ryan 2015-09-27 bank dog 16 3 9 4 Jane Bob 2015-09-27 gym cat 24 20 9 5 Chris Steve 2015-09-26 car cat 12 8 2 6 Jack Ashley 2015-09-26 home cat 8 6 7 可能只是让你想要你想要的。

PROC RANK

这将给你5组(名为0 .. 4),这应该相当于P20,P40,......,P80截止值。

如果你想要不相等的桶,即P10,P40,P60和P90,那么你必须选择最低级别并组合组。使用上面的组:

data test;
do i=1 to 100;
 output;
end;
run;

proc rank data=test out=test2 groups=5;
var i;
ranks grp;
run;

10是P值的最小公分母。 100/10 = 10所以我们需要来自%let groups=10; proc rank data=test out=test2 groups=&groups; var var; ranks grp; run; /* P = (grp+1)*&groups Cutoffs 10, 40, 60, 90 implicit 5 new groups */ %let n_cutoff=4; %let cutoffs=10, 40, 60, 90; data test3(drop=_i cutoffs:); set test2; array cutoffs[&n_cutoff] (&cutoffs); P = (grp+1)*&groups; do _i=1 to &n_cutoff; if P <= cutoffs[_i] then do; new_grp = _i-1; leave; end; if _i = &n_cutoff then new_grp = _i; end; run; 的10个组。

最后的数据步骤使用您正在寻找的截止值组合这些组。