Proc sql:基于回顾期的新客户和继续客户

2024-03-11

我有以下数据:

wei 01feb2018    car
wei 02feb2018    car
wei 02mar2019    bike
carlin 01feb2018 car
carlin 05feb2018 bike
carlin 07mar2018 bike
carlin 01mar2019 car

我想识别新客户和持续客户,如果客户在过去 12 个月内没有购买过商品,那么它将成为新客户。所需的输出就像

wei 01feb2018    car     new
wei 02feb2018    car     cont.
wei 02mar2019    bike    new
carlin 01feb2018 car     new
carlin 05feb2018 bike    cont.
carlin 07mar2018 bike    cont.
carlin 01mar2019 car     new

现在,如果客户在同一个月内为前客户购买了任何商品,即 1 月 1 日购买的汽车和 1 月 15 日购买的自行车,那么我希望在一份报告中将客户 a 分类为 1 月的新客户,在另一份报告中,我希望客户 a 都为新客户并继续。

我正在尝试但不明白逻辑 -

proc sql;
select a.*,(select count(name) from t where intnx("month",-12,a.date) >= 356) 
as tot
from t a;
Quit;

您似乎需要两个不同的“状态”变量,一个用于连续性over前一年和连续性的一年within month.

在 SQL 中,存在自反相关子查询结果可以是满足以下条件的行的案例测试over and within标准。日期算术用于计算相隔天数和INTCK用于计算间隔月份:

data have; input
customer $ date& date9. item& $; format date date9.; datalines;
wei     01feb2018  car
wei     02feb2018  car
wei     02mar2019  bike
carlin  01feb2018  car
carlin  05feb2018  bike
carlin  07mar2018  bike
carlin  01mar2019  car
run;

proc sql;
  create table want as
  select *,
    case
      when exists 
      (
        select * from have as inner 
        where inner.customer=outer.customer
          and (outer.date - inner.date) between 1 and 365
      ) 
      then 'cont.'
      else 'new'
    end as status_year,
    case
      when exists 
      (
        select * from have as inner 
        where inner.customer=outer.customer
          and outer.date > inner.date
          and intck ('month', outer.date, inner.date) = 0
      ) 
      then 'cont.'
      else 'new'
    end as status_month
  from have as outer
  ;
quit;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Proc sql:基于回顾期的新客户和继续客户 的相关文章

  • 在 sas 宏文件名管道中使用引号

    我正在使用以下使用文件名管道的宏 但出现错误 提示无效选项名称 dir 等 我怀疑这可能是由于定义文件名和管道时的引号所致 我想它会将其识别为一个选项 我尝试删除引号 删除 bquote 并仅使用双引号 但仍然不断出现错误 我正在使用 Wi
  • 我正在尝试将 SFTP 文件(SAS 数据集或令牌)从一台服务器传输到 SAS 中的另一台服务器

    这是我第一次尝试使用 SAS 对文件进行 SFTP 我尝试使用文件名语句 但出现了一些错误 let user userid filename source sftp input sas7bdat user user pass passwor
  • 如何使用 Python Pandas 将 JMP *.jmp 文件读取到 Pandas 数据帧中

    我正在努力读书SAS JMP 文件与熊猫read csv函数进入 Pandas 数据框 有人有处理这种类型的数据文件的经验吗 最有效的方法是什么 这对我有用 其结果有时有点出乎意料 例如 有时我得到没有标题的 CSV 即使在 JMP 中它们
  • SAS 中的 PROC SQL - 所有项目对

    我有一个数据集 我需要在其中查看来自另一个组的所有项目对 我在下面创建了一个玩具示例来进一步解释 BUNCH FRUITS 1 apples 1 bananas 1 mangos 2 apples 3 bananas 3 apples 4
  • 如何在一个proc打印语句中打印多个数据集?

    我有一个 sas 查询 如果我创建了 3 个数据集 可以说命名为ds1 ds2 ds3 现在 我想在一个 proc print 语句下打印所有这些 那么我们该怎么做呢 就像 我想要这样的东西 proc print data work ds1
  • sas 为数据步骤中的每个实例执行宏

    我有一个宏 可以在一组给定的时间范围内将数据插入表中 它循环遍历一系列 从 到 日期 存储在数据集中 并使用 proc sql insert 语句运行宏 在所有这些结束时检查数据时 我注意到新数据集中只有最后一个 从 到 期间的数据 这是我
  • SAS中的逻辑函数确定变量的特定值是否为数字?

    我有一个主要是数值的变量 但偶尔会有一个字符潜入 因此 变量在 SAS 中存储为字符 我希望能够确定此字符变量中的各个值是否是数字 在知道哪些值是数字 哪些是字符后 我想创建一个新的 数字 变量 其中字符变量的数字值存储为数字 而字符值存储
  • SAS - 使用另一列中的值动态创建列名称

    我有一列包含许多从 XML 解析器解析的标志 数据如下 USERKEYED Y VALMATCH N DEVICEVERIFIED N EXCEPTION N USERREGISTRD N ASSOCIATE Y EXTERNAL N GR
  • 从 pandas 数据帧生成 sas7bdat 文件

    我想知道是否有任何Python库支持这种转换 目前我找到的选项是SASpy csv或SQL数据库 但不成功 这实际上不是一个编程问题 但希望这不会成为问题 我找到了这个帖子 将 pandas 数据框导出为 SAS sas7bdat 格式 h
  • SAS 我可以逆向进行 sas 过程观察吗

    我知道Sas在处理时从数据集顶部的观察开始 然后继续进行下一个直到到达底部观察 但是有没有一种简单的方法可以让sas首先处理底部观察 然后再处理到顶部 您可以使用nobs and point向后处理它 而无需执行任何中间步骤 这是一个例子
  • 如何根据 SAS Enterprise Guide / PROC SQL 中具有相同前缀的列中的值创建具有适当前缀的 2 个新列?

    我在 SAS Enterprise Guide 中有如下表 ID COUNT COL A COUNT COL B SUM COL A SUM COL B 111 10 10 320 120 222 15 80 500 500 333 1 5
  • 导出文件期间检测到打开代码语句递归

    我尝试在 SAS 中导出文件 但收到 检测到打开代码语句递归 错误 由于我根据根据提示日期定义为宏变量的日期导出多个文件 因此我想用此变量命名要导出的文件 但它不起作用 如果有人帮助我 我将非常感激 rep date 30APR2015 0
  • SAS HashTable 中由 hashexp 指定的表大小到底是多少?

    我想对 SAS 哈希表中存储桶的定义进行一些澄清 问题正是关于hashexp范围 根据 SAS DOC 的说法 hashexp is 哈希对象的内表大小 其中哈希表的大小为2n HASHEXP 的值用作 2 的指数来创建哈希表大小 例如 H
  • 当我将 SAS 数据集导出到 csv 时;它正在修剪字符中的所有前导空格

    当我将 SAS 数据集导出到 csv 时 它正在修剪字符中的所有前导空格 请帮助我保留 csv 输出中的所有前导空格 使用的语句是 Proc Export Data Globl Mth Sumry OutFile GMUPath 20 Rp
  • SAS 和 Excel 中百分位数的不同结果

    我正在尝试获取 SAS 中的百分位数 我在 Excel 中得到了百分位数 我期望在 SAS 中也得到相同的结果 但是当我在 SAS 中得到百分位数时 它与 excel 中的不同 我正在使用下面的示例数据 1 2 3 4 5 6 7 8 9
  • Proc sql:基于回顾期的新客户和继续客户

    我有以下数据 wei 01feb2018 car wei 02feb2018 car wei 02mar2019 bike carlin 01feb2018 car carlin 05feb2018 bike carlin 07mar201
  • 如何在更新宏变量的数据步骤中调用宏并立即使用该值?

    下面的例子非常简单 可能可以用更简单的方式解决 不过 我有兴趣让它发挥作用 以下示例基于 sashelp library 的 cars dataset 首先 我有一个名为 fun 的宏 proc contents data sashelp
  • SAS SQL 传递

    我想知道在这段代码中 SAS SQL 传递中首先执行的是什么 Connect To OLEDB As MYDB DBConnect Catalog MYDB Create table MYDB extract as select put P
  • 使用 SAS 导出到 Excel

    假设我有 2 个 SAS 数据集 test1 sas 和 Test2 sas 现在我想将这2个数据集导出到Excel中 其中Excel文件Sheet1中将有test1 sas数据 Sheet2中将有test2 sas数据 怎么做 从 开始这
  • 删除 SAS 中的表

    什么是最高效的SAS中删除表的方法 我有一个循环并删除大量表的程序 想知道 PROC SQL 之间是否存在性能差异 和过程数据集 一次删除一张桌子 或者如果还有其他方法吗 如果外包给操作系统是合理的 那可能是最快的 否则 我的不科学观察似乎

随机推荐