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;

基本上每次“Activity”返回“Activity1”时,变量“logflag”都会增加 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。每个 LOGFLAG 组的第一个观察值是 1,因为您在递增之前首先将其设置为 0。

于 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 回答