以下に、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;
これについて助けてくれてありがとう。