【问题标题】:Is there a way to name proc rank groups based on values within the group?有没有办法根据组内的值来命名 proc 等级组?
【发布时间】:2012-08-23 20:29:32
【问题描述】:

所以我有多个连续变量,我使用proc rank 将它们分成 10 组,即对于每个观察,现在有一个 "GPA" 和一个 "GRP_GPA" 值,Hmwrk_Hrs 和 GRP_Hmwrk_Hrs 也是如此。但是对于每个新的组列,值都在 1 到 10 之间。有没有办法更改该值,例如,如果这些是组内的最小值和最大值,而不是 1,它将是 1.2-2.8?我知道我可以使用 proc 格式或 if then 或 case in sql 手动完成,但因为我有 40 个不同的列,这将非常耗时。

【问题讨论】:

  • 欢迎来到 Stack Overflow!目前尚不清楚您在问什么。通常,提出问题比回答问题更难。花一点时间,试着忘记你所知道的关于你的问题的一切,然后阅读你的问题。我相信我们可以提供帮助。

标签: sas rank proc


【解决方案1】:

您的问题不清楚您是要存储最小值-最大值还是仅使用它们格式化排名列。我下面的解决方案对排名列进行格式化,并利用 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;

【讨论】:

    【解决方案2】:

    除了基思的好回答,你还可以做以下事情:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多