第一个和最后一个函数 sas
First and last function sas
我有一些数据看起来像这样
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' returns 到 '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;
我有一个 'count',每当新的 'Activity' 出现在某个 '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 或更高。我确信我以前有过这个工作,但我无法弄清楚我所做的更改。
有人可以帮忙吗?
谢谢,
输入数据:
data example1;
attrib Activity format = .
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
您缺少 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;
您的输入数据集中必须已经有一个名为 COUNT 的变量。
因此,每次 SET 语句运行输入数据集中的值都会覆盖上一次观察的值。
为了得到你的例子,那么每次观察的 COUNT 可能是 1。因此,当您在 ACTIVITY 更改时递增时,它变为 2。每个 LOGFLAG 组的第一个观察值是 1,因为您在递增之前首先将其设置为 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' returns 到 '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;
我有一个 'count',每当新的 'Activity' 出现在某个 '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 或更高。我确信我以前有过这个工作,但我无法弄清楚我所做的更改。
有人可以帮忙吗?
谢谢,
输入数据:
data example1;
attrib Activity format = .
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
您缺少 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;
您的输入数据集中必须已经有一个名为 COUNT 的变量。 因此,每次 SET 语句运行输入数据集中的值都会覆盖上一次观察的值。
为了得到你的例子,那么每次观察的 COUNT 可能是 1。因此,当您在 ACTIVITY 更改时递增时,它变为 2。每个 LOGFLAG 组的第一个观察值是 1,因为您在递增之前首先将其设置为 0。