1

次のようなサンプル データがあり、連続して勝敗したベットの数を計算したいと考えています。

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 PRINT; RUN;
proc sort data=have;
   by username betdate;
run;
DM "log; clear;";
data want;
   set have;
    by username dateOnly betdate;   
   retain calendarTime eventTime cumulativeDailyProfit profitableFlag;
   if first.username then calendarTime = 0;
   if first.dateOnly then calendarTime + 1;
   if first.username then eventTime = 0;
   if first.betdate then eventTime + 1;
   if first.username then cumulativeDailyProfit = 0;
   if first.dateOnly then cumulativeDailyProfit = 0;
   if first.betdate then cumulativeDailyProfit + stake;
   if winnings > 0 then winner = 1;
  if winnings <= 0 then winner = 0;
 PROC PRINT; RUN;

たとえば、最初の 4 ベット 4 人のプレーヤー 1 が勝者であるため、この列の最初の 4 行には 1,2,3,4 が表示されます (この時点で、4 連勝)。5 番目は敗者なので、-1 を表示し、その後に 1,2 を表示する必要があります。次の 3 つの行 (プレーヤー 3 の場合、顧客は 3 回連続して賭けを行っているため、-1、-2、-3 と表示されます。データ ステップでこの列の値を計算するにはどうすればよいですか?連続して勝った賭けの最大数 (現在まで) の列と、顧客がこれまでに各行で負わなければならなかった最大の負けた賭けの数は?

助けてくれてありがとう。

4

1 に答える 1