在sas中查找新用户与重复用户

在sas中查找新用户与重复用户,sas,proc-sql,Sas,Proc Sql,在给定的数据集下面,我试图找到新用户和重复用户 DATE ID Unique_Event 20200901 a12345 1 20200902 a12345 1 20200903 b12345 1 20200903 a12345 1 20200904 c12345 1 在上面的数据集中,由于a12345出现在多个日期,应被视为“重复”用户,而b12345只出现一次,因此他是“新”用户。请注意,这只是样本数据,因为实际数

在给定的数据集下面,我试图找到新用户和重复用户

DATE        ID       Unique_Event
20200901    a12345   1
20200902    a12345   1
20200903    b12345   1
20200903    a12345   1
20200904    c12345   1
在上面的数据集中,由于a12345出现在多个日期,应被视为“重复”用户,而b12345只出现一次,因此他是“新”用户。请注意,这只是样本数据,因为实际数据相当大。我尝试了下面的代码,但没有得到正确的计数。理想情况下,tot_num_users-num_new_users应该是重复用户,但我得到的计数不正确。我错过什么了吗

Expected Output:
Month   new_users   repeated_users
9        2           1
代码:


在子选择中,对于每个
ID
,您可以计算不同的
日期
的数量,以确定
新的
/
重复的
状态。所有ids聚合计算都是通过子选择进行的

proc sql;
  create table freq as
  select 
    count(*) as id_count
  , sum (status='repeated') as id_repeated_count   /* sum counts a logic eval state */
  , sum (status='new')      as id_new_count
  from 
    ( select 
          id
        , case 
            when count(distinct date) > 1 then 'repeated' 
            else 'new'
          end as status
      from 
        user_events
      group by
        id
    ) as statuses
  ;

在子选择中,对于每个
ID
,您可以计算不同的
日期
的数量,以确定
新的
/
重复的
状态。所有ids聚合计算都是通过子选择进行的

proc sql;
  create table freq as
  select 
    count(*) as id_count
  , sum (status='repeated') as id_repeated_count   /* sum counts a logic eval state */
  , sum (status='new')      as id_new_count
  from 
    ( select 
          id
        , case 
            when count(distinct date) > 1 then 'repeated' 
            else 'new'
          end as status
      from 
        user_events
      group by
        id
    ) as statuses
  ;

一个不使用procsql的替代解决方案(尽管我知道您将其标记为“procsql”)


一个不使用procsql的替代解决方案(尽管我知道您将其标记为“procsql”)


因为您使用的是proc sql,所以这是一个sql问题,而不是SAS问题。 尝试以下方法:

proc sql;
    select ID,count(Unique_Event)
    from <that table>
    group by ID
    order by ID
run;
proc-sql;
选择ID、计数(唯一事件)
从…起
按ID分组
按ID订购
跑

因为您使用的是proc sql,所以这是一个sql问题,而不是SAS问题。 尝试以下方法:

proc sql;
    select ID,count(Unique_Event)
    from <that table>
    group by ID
    order by ID
run;
proc-sql;
选择ID、计数(唯一事件)
从…起
按ID分组
按ID订购
跑

请发布预期结果数据集的样本好吗?@LuizZ添加了预期结果数据集的样本好吗?请发布预期结果数据集的样本好吗?@LuizZ添加了预期结果数据集的样本你太棒了你太棒了