0

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 の異なる列があるためです。

4

2 に答える 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 に答える