首先使用 SAS 函数对类别中的条目进行计数。并且未分类

Counting entries in a category using SAS functions first. and notsorted

我有一些按会话细分的数据 Activity,有很多会话,每个会话中有很多活动。我希望能够做的是计算一个人在每个会话中执行的活动的数量(一个人在一个会话中的两个不同时间执行相同 activity 的时间分别计算)。我正在处理的数据如下所示,计数列是我要创建的列;

data have;     
  input Session $ Activity $ Count;
  datalines;
AAAA    VVVV    1
AAAA    XXXX    2
AAAA    XXXX    2
AAAA    YYYY    3
AAAA    ZZZZ    4
AAAA    XXXX    5
AAAA    XXXX    5
BBBB    VVVV    1
BBBB    XXXX    2
BBBB    YYYY    3
BBBB    YYYY    3
BBBB    YYYY    3
CCCC    VVVV    1
CCCC    VVVV    1
CCCC    XXXX    2
CCCC    XXXX    2
CCCC    YYYY    3
CCCC    ZZZZ    4
CCCC    VVVV    5
CCCC    XXXX    6
;
run;

我已经使用此代码计算了每个会话中的观察次数;

proc sort
data = a.input;
by session eventtime;
run;

data a.example;
set a.input;
count +1;
if first.session then count =1;
by session eventtime;
tun;

我一直在探索这种方法,首先使用嵌套的 if 语句和 SAS。函数,但是这似乎需要对数据进行排序,因为 activity 可能会在一个会话中出现多个点,我无法做到。

我的第一个想法是使用 'do' 或 'do while' 循环,但是我不确定如何设置条件,以便在未知值不变的情况下进行迭代。

非常感谢任何帮助。

谢谢!

假设您想要计算 count 变量,那么您应该可以这样做。 by不需要排序:

data want;
  set have;
  by session activity notsorted;
  if first.session then new_count=0;
  if first.activity then new_count+1;
run;

这假定它已按您希望的方式(按事件时间)排序到此数据集中。 notsorted 告诉 by 不要担心实际的排序顺序; first 现在仅检测先前值的变化。