7

私は SAS の初心者で、次の問題があります。

あるデータセットからいくつかの変数 (ABC) のカウントとパーセントを計算し、結果を別のデータセットに保存する必要があります。私のコードは次のとおりです。

proc freq data=mydata; テーブル ABC / out=data_out ; 走る;

各変数のプロシージャの結果は SAS 出力ウィンドウに表示されますが、data_out には最後の変数の結果のみが含まれます。それらをすべてdata_outに保存する方法は? どんな助けでも大歓迎です。

4

5 に答える 5

5

ODS OUTPUTあなたの答えです。を使用して直接出力することはできませんOUT=が、次のように出力できます。

ods output OneWayFreqs=freqs;
proc freq data=sashelp.class;
  tables age height weight;
run;
ods output close;

OneWayFreqs は一方向テーブル、(n>1)-way テーブルは CrossTabFreqs です。

ods output CrossTabFreqs=freqs;
ods trace on;
proc freq data=sashelp.class;
  tables age*height*weight;
run;
ods output close;

ods trace on;最初の proc を (画面に対して) 実行してから実行することで、正しい名前を見つけることができます。ログ内の出力の名前が表示されます。(ods trace off;見飽きたら。)

于 2015-01-16T21:42:11.660 に答える
1

ここで学ぶべき多くの優れた基本的な sas のこと

1) データセットが上書きされないように、異なる出力データセット名で 3 つの proc freq ステートメント (変数 abc ごとに 1 つ) を実行します。

2) out = ステートメントで rename オプションを使用して、データセットを結合するときのカウント変数とパーセント変数を変更します。

3) カテゴリ別に並べ替え、すべてのデータセットをまとめてマージする

(複数の変数に表示される値があると仮定していますが、そうでない場合は、データセットを積み重ねることができます)

data mydata;
    input a $ b $ c$;
    datalines;
r r g
g r b
b b r
r r r
g g b
b r r
;
run;

proc freq noprint data = mydata; 
    tables a / out = data_a 
    (rename = (a = category count = count_a percent = percent_a)); 
run;
proc freq noprint data = mydata; 
    tables b / out = data_b 
    (rename = (b = category count = count_b percent = percent_b)); 
run;
proc freq noprint data = mydata; 
    tables c / out = data_c 
    (rename = (c = category count = count_c percent = percent_c)); 
run;

proc sort data = data_a; by category; run;
proc sort data = data_b; by category; run;
proc sort data = data_c; by category; run;

data data_out;
    merge data_a data_b data_c;
    by category;
run;
于 2015-01-16T22:21:49.653 に答える
0

いつものように、SAS でこの種のことを行うには、さまざまな方法があります。その他のオプションをいくつか示します。

1. proc freq ではなく proc summary を使用します。

proc summary data = sashelp.class;
    class age height weight;
    ways 1;
    output out = freqs;
run;

2. 1 つのテーブル ステートメントで複数のテーブル ステートメントを使用するproc freq

これは、SAS が入力データセットを 3 回ではなく 1 回だけ読み取る必要があるため、3 つの別個の proc freq ステートメントを実行するよりも効率的です。

proc freq data = sashelp.class noprint;
    table age       /out = freq_age;
    table height    /out = freq_height;
    table weight    /out = freq_weight;
run;

data freqs;
    informat age height weight count percent;
    set freq_age freq_height freq_weight;
run;
于 2015-01-17T11:19:21.633 に答える