proc 手段で出力オプションを使用していると仮定すると (ODS OUTPUT ではなく)、そのデータセットに含まれるものを次のように制御できます。
proc means data=sashelp.class;
var age;
class sex;
output out=mymeans nmiss= P1= P5= /autoname;
run;
統計名の完全なリストは、「統計キーワード」の下のPROC MEANS ドキュメントで入手できます。
ODS OUTPUT を使用して、同じ結果を (わずかに異なる出力形式で) 達成することもできます。
ods output summary=mymeans;
ods trace on;
proc means data=sashelp.class nmiss p1 p5;
var age;
class sex;
run;
ods trace off;
ods output close;
ODS TRACE のオン/オフは、作成されたテーブルの名前 (つまり、'summary') を表示することです。本番環境では必要ありません。この場合、(PROC MEANS ステートメントで) 出力ウィンドウに統計を要求するのと同じ方法で統計を要求します。
編集に基づいて、転置します (統計ごとに 1 行)。直接はわかりませんが、移調はそれほど難しくありません。
proc means data=sashelp.class nmiss p1 p5;
class sex;
var _numeric_;
output out=mymeans n= mean= nmiss= p1= p5= /autoname ;
run;
data mymeans_out;
set mymeans(drop=_type_ _freq_);
by sex;
array numvars _numeric_;
format var stat $32.;
do _t = 1 to dim(numvars);
var=scan(vname(numvars[_t]),1,'_');
stat=scan(vname(numvars[_t]),-1,'_');
value = numvars[_t];
output;
end;
keep sex var stat value;
run;
これにはいくつかの制限があります。変数名に既にアンダースコアが含まれている場合は、var=scan...
行を書き直して substr を使用し、最後のアンダースコアを見つけてからvar = substr(vname(...),1,position_of_last_underscore)
. -1 (逆方向) を使用するため、Stat は問題ないはずです。変数名が最大 23 文字を超える可能性がある場合、切り捨てられたり変更されたりする可能性があるため、正確な変数名を取得できない可能性があります。その場合は、上記の ODS OUTPUT ソリューションが役立ちます (追加の列に元の変数の名前が表示されるため) が、その値を切り捨てられた名前に関連付けるには、さらに作業が必要になります。
また、配列の定義を簡略化するために_TYPE_
とも削除します。_FREQ_
それらが必要な場合は、それらを個別に出力しないように除外して保持するためのコードを少し書く必要があります。