2016-12-08 113 views
1

試圖谷歌它並無法找到任何(也許這是我是完全noob)。SAS循環通過變化

我想在我的數據集中創建一個名爲step的新變量,從1開始計數,直到customerid發生變化。

舉例: 這是我得到的表:

Customerid Page  step 
1   Frontpage 
1   Middlepage 
2   Frontpage 
2   Middlepage 
2   Lastpage  
3   Frontpage 
3   Middlepage 

我想要什麼:

Customerid Page  step 
1   Frontpage 1 
1   Middlepage 2 
2   Frontpage 1 
2   Middlepage 2 
2   Lastpage 3 
3   Frontpage 1 
3   Middlepage 2 

我得到現在:

Customerid Page step 
1 Frontpage 1 
1 Middlepage 2 
2 Frontpage 3 
2 Middlepage 4 
2 Lastpage 5 
3 Frontpage 6 
3 Middlepage 7 

我試圖做到這一點在薩斯,但它沒有工作:

data nordea_dk1; 
set nordea_dk; 
by custerimd; 
if first.customerid then do; 
step=1; 
step + 1; 
output; 
run; 
+0

確保輸入數據集中不存在新變量「STEP」。這將阻止值被保留。 – Tom

+0

它不,它僅僅是爲了舉例,但仍然不起作用 –

+0

發佈顯示問題的示例數據。 – Tom

回答

1

檢查SAS日誌記錄或錯誤。基本邏輯適用於您的測試數據。

data have ; 
input Customerid Page $20. ; 
cards; 
1 Frontpage 
1 Middlepage 
2 Frontpage 
2 Middlepage 
2 Lastpage 
3 Frontpage 
3 Middlepage 
; 

data want ; 
    set have ; 
    by customerid ; 
    if first.customerid then step=0; 
    step+1; 
run; 
+0

當我使用你的代碼時,我也會得到。 是因爲在真實數據集中customerid是一個文本字符串? –

+0

第一。標誌不關心變量是數字還是字符。 – Tom

+0

在您的幫助下我發現問題!我已將customerid變量設置爲名稱: '訪問者ID 'n 然後,我將其更改爲ID,因爲某種原因它的工作原理類似於:S。 –

0

幾個語法項目,custerimd上有拼寫錯誤,而do是不必要的。另外,這種情況下不需要output,因爲它也會在數據步驟結束時輸出。

就程序邏輯而言,您需要重置first.customerid上的步驟,並在其他值上增加它,因此需要另外一種情況。這應該是你在找什麼:

data nordea_dk1; 
    set nordea_dk; 
    by customerid; 

    if first.customerid then 
     step=1; 
    else 
     step+1; 

run;  
+0

然後我這樣做,它只是計數每個觀察。它不會通過customerid變量對計數進行分組? 當它涉及到變量customerid中的新唯一ID時,我希望它重置爲1。 –

+0

也許我應該提一下,customerid是一個文本變量,不知道這是否有任何影響? –

+0

它應該無關緊要,如果它是一個文本變量,是數據集排序? – pieceOpiland