0

以下に、2 つの変数に従って観測値をランク付けするデータ (コードを使用して作成) を示します。この場合、プレーヤーの最初の賭けと 2 番目の賭けをランク付けし、2 つの「ランク」変数を作成します。私が代わりにやりたいことは、代わりに2つの変数の関数に従って観測値をランク付けすることです(2つの変数の平均など)。予備データステップを使用するのではなく、PROC RANKコマンド自体でこれを実行したいと思います必要なすべての変数でこれを複製した後、ランキングはかなり複雑になります。PROC RANK ステートメントに演算子を入れることはできますか? これを行うのではなく:

    Proc rank data=want ties=mean out=ranked groups=2;
         var bet1stake bet2stake;
         ranks bet1stakeRank bet2stakeRank;
    run;

私はこれをしたいと思います:

    Proc rank data=want ties=mean out=ranked groups=2;
         var avg(bet1stake, bet2stake);
         ranks firstTwoBetsRank;
    run;

これは可能ですか?

これは、完全なサンプル データを作成する方法です。

    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;

    proc sort data=have;
       by username betdate;
    run;

    data have;
    set have;
       by username betdate;   
       retain eventTime;
       if first.username then eventTime = 0;
       if first.betdate then eventTime + 1;
       run;

    proc sql;
    create table want as 
    select 
            distinct username,
            (select distinct stake from have where username = main.username and eventTime = 1) as bet1Stake,
            (select distinct stake from have where username = main.username and eventTime = 2) as bet2Stake
        from have main;
    quit;

    Proc rank data=want ties=mean out=want groups=2;
         var bet1stake bet2stake;
         ranks bet1stakeRank bet2stakeRank;
    run;

これについて助けてくれてありがとう。

4

1 に答える 1

2

残念ながら、観測をランク付けしたい変数に演算子を適用することはできません。選択できるのは、DATAステップを使用して演算子の適用とランキングの計算の両方を行うことです。

または、ディスク容量が心配な場合に備えて、 Data step vieworを使用して中間ステップとして演算子を適用します。SQL view

SQL データベースからデータを取得する場合 (ウィンドウ機能をサポートしていると仮定)、データベースにパススルーされる SQL コードだけを使用して、実行しようとしていることを正確に実行する必要があります。

于 2013-08-17T19:32:28.987 に答える