我想找到构建另一个变量的方法(即使在同一个数据集中也可以),即旧变量的分类。我会选择桶的数量(例如,使用百分位作为截止值的例子:p10, p20, p30
等)。
现在我用proc univariate
来提取变量的百分位数。但这只给我百分位数(我的截止值),然后我必须使用百分位数手动构建新变量。
如何创建这个新变量,将截止值和桶数作为输入?
提前致谢
答案 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个组。
最后的数据步骤使用您正在寻找的截止值组合这些组。