1

これは簡単な質問のはずですが、私は理解できませんでした... 以下のように、多くの変数の平均と中央値を取得したいと思いproc univariateます。すべての変数に平均値M_と中央値を手動で追加するのは本当に時間がかかります。MD_そうするための配列などの簡単なアプローチがあるかどうか疑問に思っていますか? どうもありがとう!

コード:

data old;
input year type A1 A2 A3 A4 A5;
datalines;
2000    1   1   2   3   4   5
2000    1   2   3   4   5   6
2000    2   3   4   5   6   7
2000    2   4   5   6   7   8
2001    1   5   6   7   8   9
2001    1   6   7   8   9   10
2001    1   7   8   9   10  11
2001    2   8   9   10  11  12
2001    2   9   10  11  12  13
2001    2   10  11  12  13  14
2002    1   11  12  13  14  15
2002    1   12  13  14  15  16
2002    1   13  14  15  16  17
2002    2   14  15  16  17  18
2002    2   15  16  17  18  19
2002    2   16  17  18  19  20
run;

proc univariate data=old noprint;
    var A1 A2 A3 A4 A5;
    by year type;
    output out=new
    mean=M_A1 M_A2 M_A3 M_A4 M_A5
    median=MD_A1 MD_A2 MD_A3 MD_A4 MD_A5;
run;

予想されるデモ コード:

%let varlist = A1 A2 A3 A4 A5; 
array vars (*) &varlist;
proc univariate data=old noprint;
    var &vars(*);
    by year type;
    output out=new
    mean=M_&vars(*)
    median=MD_&vars(*);
run;

proc sql を使用してコードを修正する

%macro uni;
%let varlist='A1','A2','A3','A4','A5';
%let vars=A1 A2 A3 A4 A5;
proc sql;
select cats('M_',name) into :meannamelist separated by ' '
 from dictionary.columns
 where libname='WORK' and memname='OLD' and name in (&varlist);
select cats('MD_',name) into :mediannamelist separated by ' '
 from dictionary.columns
 where libname='WORK' and memname='OLD' and name in (&varlist);
quit;

proc univariate data=old;
    var &vars;
    by year type;
    output out=new
    mean=&meannamelist
    median=&mediannamelist;
run;
%mend uni;
options mprint;
%uni;
4

3 に答える 3

2

もう 1 つのオプションは、PROC SQL でこれらのリストを作成することです。

%let varlist=A1,A2,A3,A4,A5;
proc sql;
select cats('M_',name) into :meannamelist separated by ' '
 from dictionary.columns
 where libname='WORK' and memname='OLD' and name in (&varlist);
select cats('MD_',name) into :mediannamelist separated by ' '
 from dictionary.columns
 where libname='WORK' and memname='OLD' and name in (&varlist);
quit;

proc univariate etc.;
mean &meannamelist;
median &mediannamelist;
run;
于 2013-10-15T15:32:06.393 に答える
0

PROC MEANS必要な統計を取得するために使用できる場合は、それを行います。autoname出力ステートメントには、あなたが求めていることをほぼ実行するオプションがあります。では平均値と中央値の両方を使用できますPROC MEANS

ods outputそうでない場合は、物事を単純化することに 目を向けるかもしれません。

于 2013-10-15T04:09:03.500 に答える