2016-12-08 2 views
1

Googleにしようとしていて、何も見つかりませんでした(おそらくそれは私が完全にnoobです)。SAS loop by varaible

stepという名前のデータセットに新しい変数を作りたいと思います。これは、customeridが変更されるまで1から数えます。

例:

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

私はあなたのコードを使用するときにもそれを取得します。 実際のデータセットでは、顧客IDはテキスト文字列なので、それはありますか? –

+0

No. FIRST。変数が数値か文字かどうかはフラグは気にしません。 – Tom

+0

あなたの助けを借りて問題が見つかりました!私はcustomerid変数を名前に設定しました: 'ビジターID ' n それから、IDに変更しました。それは何らかの理由で魅力的です。 –

0

文法的な項目がいくつかありますが、custerimdにスペルミスがあり、doは不要です。また、outputはこの場合は必要ありません。なぜなら、とにかくデータステップの最後に出力されるからです。

プログラムロジックに関して、first.customeridのステップをリセットし、追加の値を増やす必要があります。したがって、elseケースが必要です。これは、あなたが探しているものでなければなりません:

data nordea_dk1; 
    set nordea_dk; 
    by customerid; 

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

run;  
+0

それから、私は各観測値を数えるだけです。カウントをcustomerid変数でグループ化しませんか? 変数customeridの新しい一意のIDについては、1にリセットします。 –

+0

おそらく、私は顧客IDがテキスト変数であることを言及する必要があります、それが影響を与えるかどうかわからないのですか? –

+0

テキスト変数であるかどうかは関係ありません。データセットはソートされていますか? – pieceOpiland