0

私はこのように見えるいくつかのデータを持っています

data example1;     
   input Activity $ logflag;
   Activity1 1
   Activity2 1
   Activity3 1
   Activity4 1
   Activity1 2
   Activity2 2
   Activity3 2
   Activity1 3
   Activity2 3
   Activity3 3
   Activity4 3
   Activity1 4
   Activity2 4
   ; 
run;

基本的に、変数「logflag」は「Activity」が「Activity1」に戻るたびに1ずつ増加しますが、これに到達したいです。

data example2;     
   input Activity $ logflag count;
   Activity1 1 1
   Activity2 1 2
   Activity3 1 3
   Activity4 1 4
   Activity1 2 1
   Activity2 2 2
   Activity3 2 3
   Activity1 3 1
   Activity2 3 2
   Activity3 3 3
   Activity4 3 4
   Activity1 4 1
   Activity2 4 2
   ;
run;

これにより、特定の「ログフラグ」内に新しい「アクティビティ」が表示されるたびに 1 ずつ増加する「カウント」があります。

私が使用しているのはこれです。

data AS2.TENMAY_EXAMPLE4;
  set AS2.TENMAY_SESSIONID;
  by logflag Activity notsorted;
  if first.logflag then count=0;
  if first.Activity then count+1;
run;

そして、私はこれを取得しています

data example2;     
   input Activity $ logflag count;
   Activity1 1 1
   Activity2 1 2
   Activity3 1 2
   Activity4 1 2
   Activity1 2 1
   Activity2 2 2
   Activity3 2 2
   Activity1 3 1
   Activity2 3 2
   Activity3 3 2
   Activity4 3 2
   Activity1 4 1
   Activity2 4 2
   ;
run;

私が理解できないのは、カウンターが1ずつ増加してから2になるのに、3以上にならない理由です。以前はこれが機能していたと確信していますが、何を変更したのかわかりません。

誰でもこれを手伝ってくれるでしょうか?

ありがとう、

4

3 に答える 3

1

入力データセットには、COUNT という名前の変数が既に存在している必要があります。そのため、SET ステートメントが入力データセットの値を実行するたびに、前の観察の値が上書きされます。

あなたの例を得るために、COUNTはおそらくすべての観測に対して1です。そのため、ACTIVITY が変化したときにインクリメントすると 2 になります。インクリメントする前に最初に 0 に設定したため、LOGFLAG グループごとの最初の観測値は 1 です。

于 2016-07-05T16:02:30.970 に答える
0

入力データ:

data example1;
   attrib Activity format = $20.
         logflag  format = 8.;
   input Activity $ logflag;
   Activity1 1
   Activity2 1
   Activity3 1
   Activity4 1
   Activity1 2
   Activity2 2
   Activity3 2
   Activity1 3
   Activity2 3
   Activity3 3
   Activity4 3
   Activity1 4
   Activity2 4
   ; 
run;

結果を取得するには、これを試してください:

data example2;
   set example1;
   by logflag Activity notsorted;
   if first.logflag then count=1;
   else count+1;
run;

結果は次のとおりです。

Activity   logflag  count
---------  -------  -----
Activity1  1        1
Activity2  1        2
Activity3  1        3
Activity4  1        4
Activity1  2        1
Activity2  2        2
Activity3  2        3
Activity1  3        1
Activity2  3        2
Activity3  3        3
Activity4  3        4
Activity1  4        1
Activity2  4        2

ここに画像の説明を入力

于 2016-07-05T10:15:52.587 に答える
0

retainステートメントがありません。データステップがループするたびに、変数がリセットされます。Retainこの動作を抑制します。

data AS2.TENMAY_EXAMPLE4;
  set AS2.TENMAY_SESSIONID;
  retain count;
  by logflag Activity notsorted;
  if first.logflag then count=0;
  count+1;
run;
于 2016-07-05T10:25:35.683 に答える