楼主: testsky_119
1914 7

[问答] 请问如何实现筛选出同一个销售人员连续3天内无销售记录的数据 [推广有奖]

  • 0关注
  • 0粉丝

VIP1

小学生

64%

还不是VIP/贵宾

-

威望
0
论坛币
2270 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
79 点
帖子
5
精华
0
在线时间
9 小时
注册时间
2017-5-25
最后登录
2019-6-10

楼主
testsky_119 发表于 2019-5-7 01:12:30 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大神,遇到个问题不知道如何实现,还希望各位看看,谢谢啊。
要实现筛选出同一个销售人员连续3天(含3天)内无销售记录的数据。
数据输入:
IDDATESales_Sum
A

2019/5/2

30

C

2019/5/4

21

B

2019/5/5

45

A

2019/4/28

9

D

2019/4/25

17

C

2019/5/2

11

B

2019/5/1

34

A

2019/4/26

24

D

2019/4/24

33

A

2019/4/21

6



需要实现的结果:
IDdate1date2间隔天数
A

2019/4/28

2019/5/2

3

A

2019/4/21

2019/4/26

4

B

2019/5/1

2019/5/5

3



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:销售人员 如何实现 筛选出 sales Dates

已有 1 人评分经验 收起 理由
eijuhz + 20 鼓励积极发帖讨论

总评分: 经验 + 20   查看全部评分

沙发
conner_he 在职认证  发表于 2019-5-7 07:28:52 来自手机
testsky_119 发表于 2019-5-7 01:12
各位大神,遇到个问题不知道如何实现,还希望各位看看,谢谢啊。
要实现筛选出同一个销售人员连续3天(含3 ...
proc sort<br>
proc transpose by 员工编号

藤椅
testsky_119 发表于 2019-5-8 00:57:06
conner_he 发表于 2019-5-7 07:28
proc sort
proc transpose by 员工编号
transpose 这个转置函数没用过,加上要实现计算每个有销售记录date之间间隔的天数(含跨月份的情况),可否贴下代码?本人是小白,谢谢,谢谢。。

板凳
testsky_119 发表于 2019-5-8 00:57:06
conner_he 发表于 2019-5-7 07:28
proc sort
proc transpose by 员工编号
transpose 这个转置函数没用过,加上要实现计算每个有销售记录date之间间隔的天数(含跨月份的情况),可否贴下代码?本人是小白,谢谢,谢谢。。

报纸
conner_he 在职认证  发表于 2019-5-10 20:11:05
testsky_119 发表于 2019-5-8 00:57
transpose 这个转置函数没用过,加上要实现计算每个有销售记录date之间间隔的天数(含跨月份的情况),可 ...
先按id,时间排个序(sort)一下,然后转置之后,用两个日期直接相减,就得到间隔的天数了

地板
conner_he 在职认证  发表于 2019-5-10 20:15:13 来自手机
conner_he 发表于 2019-5-10 20:11
先按id,时间排个序(sort)一下,然后转置之后,用两个日期直接相减,就得到间隔的天数了
这种方法有点笨,不太好用不过

7
whymath 发表于 2019-5-10 22:53:22
转置后用数组处理确实很高效。这里也给出另一种思路。
  1. data test;
  2.         format DATE $10.;
  3.         input ID$ DATE$ Sales_Sum;
  4.         cards;
  5.         A        2019/5/2        30
  6.         C        2019/5/4        21
  7.         B        2019/5/5        45
  8.         A        2019/4/28        9
  9.         D        2019/4/25        17
  10.         C        2019/5/2        11
  11.         B        2019/5/1        34
  12.         A        2019/4/26        24
  13.         D        2019/4/24        33
  14.         A        2019/4/21        6
  15. ;
  16. run;

  17. proc sort;
  18.         by ID DATE;
  19. run;

  20. data test;
  21.         Ord + 1;
  22.         set test;
  23.         Date1 = input(DATE,yymmdd10.);
  24. run;

  25. data Rst;
  26.         set test;
  27.         do i = _N_ to nobs;
  28.                 set test(rename=(ID=IDTmp Date1=DATE2 Ord=OrdTmp) keep=ID Date1 Ord)point=i nobs=nobs;
  29.                 if ID = IDTmp and Ord +1 = OrdTmp and DATE2 - Date1 > 3 then output;
  30.         end;
  31.         format DATE1 DATE2 yymmdd10.;
  32.         drop DATE IDTmp Ord OrdTmp;
  33. run;
复制代码


查看我的精华帖:免费的 SAS 软件

8
luekemia 发表于 2019-5-14 14:23:22
用lag函数就不用转置了,转置的消耗比较大:

data aaa;
input ID$ DATE Sales_Sum;
informat date yymmdd10.;
format date yymmdd10.;
cards;
A        2019/5/2        30
C        2019/5/4        21
B        2019/5/5        45
A        2019/4/28        9
D        2019/4/25        17
C        2019/5/2        11
B        2019/5/1        34
A        2019/4/26        24
D        2019/4/24        33
A        2019/4/21        6
;run;

proc sort data = aaa;
by ID date;
run;

data bbb;set aaa;
by ID;
d2=lag(date);
format d2 yymmdd10.;
gap = date-d2;
if not first.ID then do;
  if gap>=3 then output;
end;
run;

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 05:26