【问题标题】:SAS - Loop through dataSAS - 循环数据
【发布时间】:2018-07-18 23:13:41
【问题描述】:

我有一个格式如下的数据集:

Date            Item            Customer          Qty

10/05/2017 HDD IGM 1 10/09/2017 Mouse DCD 4 10/11/2017 Mouse IGM 1

假设数据按日期排序,我希望 SAS 循环遍历每条记录并回顾 6 周以查看客户是 Repeat 客户还是客户。

我的最终结果是这样的:

Date            Item            Customer          Qty           Repeat Flag

10/05/2017 HDD IGM 1 0 10/09/2017 Mouse DCD 4 0 10/11/2017 Mouse IGM 1 1

我是 SAS 新手,已经在这里停留了一段时间。提前致谢。

编辑 - 我知道这可以使用 ProcSQL 来完成,但我正在尝试仅使用 SAS 语言来实现它。

【问题讨论】:

  • “回顾 6 周”是什么意思?您是否要将最近一次记录超过 6 周的客户视为新客户?

标签: sas


【解决方案1】:

按客户和日期对数据进行排序。

data want ;
  set have ;
  by customer date ;
  lag_date=lag(date);
  if first.customer then lag_date=.;
  new = lag_date < intnx('week',date,-6,'s');
run;

【讨论】:

  • 第一条记录上缺少的 lag_date 将评估 new 为真。 new = . &lt; lag_date &lt; intnx('week',date,-6,'s');
  • @chris 对。因此,之前没有约会的人被视为新客户。
  • 谢谢大家!这正是我想做的。奇迹般有效。我从来没有在 SAS 中使用过区间函数,所以这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多