4

PROC TABULATE を使用して、PROC MEANS の出力を複製したいと考えています。この理由は、PROC MEANS 出力の変数の 1 つとして利益率 (またはマージン) を持ちたいが、1 つまたは複数の統計の計算を抑制したい、つまり '- 'または'N'と'SUM.

サンプルデータは次のとおりです。

    data have;
       input username $  betdate : datetime. stake winnings;
       dateOnly = datepart(betdate) ;
       format betdate DATETIME.;
       format dateOnly ddmmyy8.;
       datalines; 
        player1 12NOV2008:12:04:01 90 -90 
        player1 04NOV2008:09:03:44 100 40 
        player2 07NOV2008:14:03:33 120 -120 
        player1 05NOV2008:09:00:00 50 15 
        player1 05NOV2008:09:05:00 30 5 
        player1 05NOV2008:09:00:05 20 10 
        player2 09NOV2008:10:05:10 10 -10 
        player2 15NOV2008:15:05:33 35 -35 
        player1 15NOV2008:15:05:33 35 15 
        player1 15NOV2008:15:05:33 35 15 
    run;

    data want;
        set have;
        retain margin;
        margin = (winnings) / stake;
    PROC PRINT; RUN;

PROC MEANS (以下のように) を使用して統計を計算していますが、'margin' 変数の SUM 統計の値は何の意味もありません。この値を抑制したいと考えています。したがって、PROC TABULATE を使用してこのテーブルを複製し、出力をより細かく制御しようとしましたが、これまでのところ成功していません。

    proc means data=want N sum mean median stddev min max maxdec=2 order=freq STACKODS;
        var stake winnings margin;
    run;

    proc tabulate data=want;
        var stake winnings margin;
        table stake * (N Sum mean Median StdDev Min Max);
    run;

これについて何か助けていただければ幸いです。

4

1 に答える 1

4

原則として、このタイプの出力を TABULATE 関数のデフォルト部分として作成することはできません。つまり、2 つの異なるテーブル定義を要求しています。SAS 構文を使用して行うことは、基本的にテーブルにディメンションを追加することになりますが、コアの問題は解決しません。

このコードを使用して必要なテーブルを取得できますが、それらは依然として別のテーブルです。

PROC TABULATE DATA=want NOSEPS;
    VAR stake winnings margin;
    TABLE (stake winnings),(N SUM MEAN MEDIAN STDDEV MIN MAX);
    TABLE (margin),(N MEAN MEDIAN STDDEV MIN MAX);
RUN;

ODS をハッキングして、必要なことを行うためのガイドがいくつかあります (つまり、複数の子テーブルを 1 つのテーブルに組み立てる「スタック テーブル」を作成します。例については、こちらをご覧ください。「SAS スタック テーブル」を Google で検索すると、より多くの例を見つけます。

新しいタグセットを作成して HTML でこれを行いました。基本的には、テーブル間のスペースなどを削除する特別な ODS 宛先です。残念ながら、使用したコードはもうありません。自動レポート作成を行うために R に移行しました。

于 2013-08-09T23:24:21.327 に答える