所以我有多个连续变量,我使用过程等级划分为10组,即每次观察现在有一个“GPA”和一个“GRP_GPA”值,同样适用于Hmwrk_Hrs和GRP_Hmwrk_Hrs。但是对于每个新的组列,值都在1到10之间。有没有办法改变那个值,而不是1,例如如果那些是组内的最小值和最大值那么它将是1.2-2.8?我知道我可以使用proc格式手动执行,或者如果在sql中使用或者情况,但是因为我有40个不同的列,这将是非常耗时的。
答案 0 :(得分:0)
如果您想存储最小 - 最大值或仅使用它们格式化排名列,那么您的问题就不清楚了。我的解决方案格式化了排名列,并利用SAS的能力从数据集创建格式。我显然只使用了1个变量来排序,对于你的数据来说,围绕代码包装宏并为每个40个左右的变量运行将是一件简单的事情。希望这会有所帮助。
/* create ranked dataset */
proc rank data=sashelp.steel groups=10 out=want;
var steel;
ranks steel_rank;
run;
/* calculate minimum and maximum values per rank */
proc summary data=want nway;
class steel_rank;
var steel;
output out=want_min_max (drop=_:) min= max= / autoname;
run;
/* create dataset with formatted values */
data steel_rank_fmt;
set want_min_max (rename=(steel_rank=start));
retain fmtname 'stl_fmt' type 'N';
label=catx('-',steel_min,steel_max);
run;
/* create format from previous dataset */
proc format cntlin=steel_rank_fmt;
run;
/* apply formatted value to rank column */
proc datasets lib=work nodetails nolist;
modify want;
format steel_rank stl_fmt10.;
quit;
答案 1 :(得分:0)
除了Keith的好答案,您还可以执行以下操作:
proc rank data = sashelp.cars groups = 10 out = test;
var enginesize;
ranks es;
run;
proc sql ;
select *, catx('-',min(enginesize), max(enginesize)) as esrange, es from test
group by es
order by make, model
;
quit;