proc rank
したがって、10 のグループに分割するために使用した複数の連続変数があります。つまり、観測ごとに 1 つ"GPA"
の"GRP_GPA"
値があり、Hmwrk_Hrs と GRP_Hmwrk_Hrs についても同様です。しかし、新しいグループ列のそれぞれについて、値は 1 ~ 10 の間です。グループ内の最小値と最大値の場合、たとえば 1 ではなく 1.2 ~ 2.8 になるようにその値を変更する方法はありますか? proc 形式を使用して手動で実行できることはわかっていますが、sql の場合は if then または case ですが、非常に時間がかかる 40 の異なる列があるためです。
質問する
5534 次
2 に答える
0
min-max値を保存するのか、それともランク列をフォーマットするだけなのかは、質問からは明らかではありません。以下の私のソリューションは、ランク列をフォーマットし、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;
于 2012-08-24T08:28:53.710 に答える
0
キースの良い答えに加えて、次のこともできます。
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;
于 2012-09-04T11:16:45.167 に答える