楼主: xulimei1986
1750 8

如何得到下面的结果 [推广有奖]

  • 3关注
  • 0粉丝

博士生

68%

还不是VIP/贵宾

-

威望
0
论坛币
41 个
通用积分
0
学术水平
3 点
热心指数
8 点
信用等级
3 点
经验
22590 点
帖子
138
精华
0
在线时间
439 小时
注册时间
2012-3-20
最后登录
2019-5-11

楼主
xulimei1986 发表于 2013-1-7 16:41:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
原始数据:
姓名 购买日期
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
期望结果:
姓名 购买日期 购买时间间隔
张三 2012/12/11 0
张三 2012/12/12 1
张三 2012/12/15 3
李四 2012/12/13 0
李四 2012/12/15 2
李四 2012/12/25 10
王五 2012/12/26 0
即:不同用户的消费时间间隔,如张三第一次消费是2012/12/11,那第一次的消费时间间隔是0,第二次消费时间是2012/12/12,与第一次的消费时间间隔为1天,第三次消费时间是2012/12/15,与上一次的间隔为3,以此类推,求解答?
二维码

扫码加我 拉你入群

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

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

关键词:时间间隔 原始数据 求解答 第三次 如何

家家有本难念的经,计较的少一点,会和睦许多!!

沙发
henryyhl 发表于 2013-1-7 17:13:00
data old;
input name $ date yymmdd10.;
cards;
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
;
run;
proc sort data=old out=old_s;
by name date;
run;
data new(drop=date1);
set old_s;
by name;
retain cha 0;
date1=lag(date);
if first.name then cha=0 ;
else cha=date-date1;
run;
你试试这样行吗?还需要在测试一下。我感觉应该用lag函数。仅供参考。
It's not going to be easy, but it is going to be worth it.

藤椅
老师她摸我 发表于 2013-1-7 17:19:06

欢迎加入SAS群:144839730-蜗牛

板凳
xulimei1986 发表于 2013-1-7 18:00:55
henryyhl 发表于 2013-1-7 17:13
data old;
input name $ date yymmdd10.;
cards;
可以解决我上面说的问题,如果我还需要看用户最后一次消费时间与现在2013/1/7的间隔天数,那该怎么弄呢?多谢了~~
家家有本难念的经,计较的少一点,会和睦许多!!

报纸
xulimei1986 发表于 2013-1-7 18:03:22
老师她摸我 发表于 2013-1-7 17:19
可以解决我上面说的问题,如果我还需要看用户最后一次消费时间与现在2013/1/7的间隔天数,那该怎么弄呢?多谢了~~
家家有本难念的经,计较的少一点,会和睦许多!!

地板
xulimei1986 发表于 2013-1-7 18:06:02
补充问题:王五的情况也需要计算消费时间与2013/1/7的时间间隔,求各位赐教!!
家家有本难念的经,计较的少一点,会和睦许多!!

7
henryyhl 发表于 2013-1-7 20:11:58
xulimei1986 发表于 2013-1-7 18:06
补充问题:王五的情况也需要计算消费时间与2013/1/7的时间间隔,求各位赐教!!
可以在程序的run;之前加上这个语句
if last.name then time2="7jan2013"d-date;
time2即为所求的时间,但是有的观测中time2会是缺失的,只有在每个名字的最后一次出现 的那一行才有time2 的值。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
xulimei1986 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

It's not going to be easy, but it is going to be worth it.

8
henryyhl 发表于 2013-7-23 21:47:27
data old;
input name $ date yymmdd10.;
cards;
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
;
run;
proc sort data=old out=old_s;
by name date;
run;
data new(drop=date1);
set old_s;
by name;
retain date1;
if first.name then date1=date;
a=date-date1;
if not last.name then date1=date;
if last.name then date1=0;
run;
It's not going to be easy, but it is going to be worth it.

9
jolterheadmmtt 发表于 2013-8-3 15:03:55
/**
c原始数据:
姓名 购买日期
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
期望结果:
姓名 购买日期 购买时间间隔
张三 2012/12/11 0
张三 2012/12/12 1
张三 2012/12/15 3
李四 2012/12/13 0
李四 2012/12/15 2
李四 2012/12/25 10
王五 2012/12/26 0
即:不同用户的消费时间间隔,如张三第一次消费是2012/12/11,
那第一次的消费时间间隔是0,第二次消费时间是2012/12/12,
与第一次的消费时间间隔为1天,第三次消费时间是2012/12/15,
与上一次的间隔为3,以此类推
**/


data a;
input name $ date yymmdd10.;
datalines;
张三 2012/12/11
张三 2012/12/12
张三 2012/12/15
李四 2012/12/13
李四 2012/12/15
李四 2012/12/25
王五 2012/12/26
;
run;

proc sort data=a out=b;
  by name date;
run;

data c;
  set b;
  by name;
  retain date1;
  if first.name then date1=date;
  date2=date1;
  date1=date;
  dif=date-date2;
  drop date1 date2;
run;
proc print data=c;
  format date yymmdd10.;
run;

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

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