我有一些看起来像这样的数据
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;
每当“活动”返回“活动1”时,基本上变量'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;
我有一个'计数',每当新的'活动'出现在某个'logflag'中时,它会递增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或更高。我相信我之前有过这方面的工作,但我无法解决我所改变的问题。
有人能帮忙解决这个问题吗?
谢谢,
答案 0 :(得分:1)
您必须在输入数据集中已有一个名为COUNT的变量。 因此,每次SET语句运行时,输入数据集中的值都会覆盖先前观察值。
为了得到你的例子,每次观察COUNT可能是1。因此,当您在ACTIVITY更改时递增时,它将变为2.每个LOGFLAG组的第一个观察值为1,因为您在递增之前首先将其设置为0。
答案 1 :(得分: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
答案 2 :(得分:0)
您错过了retain
声明。每次datastep循环时,变量都会被重置。 Retain
会抑制此行为。
data AS2.TENMAY_EXAMPLE4;
set AS2.TENMAY_SESSIONID;
retain count;
by logflag Activity notsorted;
if first.logflag then count=0;
count+1;
run;