2013-08-06 69 views
2

我有下面的示例數據:SAS數據步驟:串接字符串變量上即時

data have; 
    input username $ betdate : datetime. winnings; 
    retain username dateonly bedate result; 
    dateOnly = datepart(betdate) ; 
    format betdate DATETIME.; 
    format dateOnly ddmmyy8.; 
    datalines; 
    player1 12NOV2008:12:04:01 -10 
    player1 12NOV2008:19:03:44 50 
    player2 07NOV2008:14:03:33 -50 
    player2 05NOV2008:09:00:00 -100 
run; 
PROC PRINT; RUN; 
proc sort data=have; 
    by username betdate; 
run; 
data want; 
    set have; 
    by username dateOnly betdate; 
    retain username dateonly bedate winnings winner resulthistory; 
    if winnings > 0 then winner = 'W'; 
    if winnings <= 0 then winner = 'L'; 
    if first.winlose then resulthistory=winner; 
    else if first.betdate then resulthistory=resulthistory||winner; 
PROC PRINT; RUN; 

我想在最後一列的累積結果歷史。對於player1,這將是'WL';對於player2,它應該是'LL'。我已經在第二個數據步驟中聲明瞭resulthistory變量,但如果它是相同的用戶名,似乎無法將新結果連接到resulististory變量。問題是我正在處理一個字符串變量,或者我想引用前一行的內容?

感謝您的任何幫助。

回答

2

幾個issues-首先,串聯動作(resulthistory=resulthistory||winner)被填充爲空白,這意味着「贏者」被砍掉的字符串

結束還有一個不存在的變量(winlose)在第一個數據步驟中輸入錯字(bedate)和不必要的保留語句。看到更新的代碼如下:

data have; 
    input username $ betdate : datetime. winnings; 
    dateOnly = datepart(betdate); 
    format betdate DATETIME.; 
    format dateOnly ddmmyy8.; 
datalines; 
player1 12NOV2008:12:04:01 -10 
player1 12NOV2008:19:03:44 50 
player2 07NOV2008:14:03:33 -50 
player2 05NOV2008:09:00:00 -100 
run; 

proc sort data=have; 
    by username dateonly betdate; 
run; 
data want; 
    set have; 
    format resulthistory $5.; 
    by username dateOnly betdate; 
    retain resulthistory; 
    if winnings > 0 then winner = 'W'; 
    else if winnings <= 0 then winner = 'L'; 
    if first.dateonly then resulthistory=winner; 
    else resulthistory=cats(resulthistory,winner); 
run; 
PROC PRINT; RUN; 
+0

偉大的東西。如果first.dateonly然後resulthistory =優勝者,我改變''如果first.username然後resulthistory =優勝者'',以便它是每個球員的結果歷史。 – user2146441

+0

享受..請注意,如果你想要超過5個結果,你將需要一個更長的格式的結果變量:-) –

+0

我怎樣才能把每個後續的結果放在一個新的列,即firstBetResult,secondBetResult等。所以,我可以將它們分組在PROC列表中查看firstBet,secondBet等的平均贏率。 – user2146441