楼主: zensheran
4176 9

sas 取每组的第一个值,敬请各位帮忙! [推广有奖]

  • 7关注
  • 2粉丝

硕士生

41%

还不是VIP/贵宾

-

威望
0
论坛币
889 个
通用积分
0.7000
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
13362 点
帖子
52
精华
0
在线时间
187 小时
注册时间
2012-7-3
最后登录
2025-10-16

楼主
zensheran 在职认证  发表于 2015-12-9 19:46:03 |AI写论文
20论坛币
大家好,我想用sas实现如下目的,不会写程序,敬请各位帮帮忙,先谢过了!
namestkcdrptdt1rptdt2
张三000002

2008/8/4

张三000002

2009/11/5

张三000002

2010/8/10

李四000002

2007/10/30

李四000002

2008/10/28

李四000002

2009/1/8



我想以name和stkcd为分组依据,新生成变量rptdt2,使得各个rptdt2等于每组的第一个rptdt1,这样我能求每个rptdt1和该组第一个rptdt1之间相差的天数。



麻烦各位了,谢谢~


P.S.:附件是全部的数据,如有需要,烦请下载。

最佳答案

yafeijojy 查看完整内容

data a; input name$ stock$ d yymmdd10.; format d yymmdd10.; cards; 张三 000002 20080804 张三 000002 20091105 张三 000002 20100810 李四 000002 20071030 李四 000002 20081028 李四 000002 20090108 ; run; data b; newd=.; set a;run; proc sort data=b; by name d; run; data c; set b; format newd yymmdd10.; by name; if first.name then newd=d; run; data d(keep=name newd);set c; where ...
关键词:请各位帮忙 请各位帮帮忙 stkcd Names name SAS

沙发
yafeijojy 发表于 2015-12-9 19:46:04
data a;
input name$ stock$ d yymmdd10.;
format d yymmdd10.;
cards;
张三 000002 20080804
张三 000002 20091105
张三 000002 20100810
李四 000002 20071030
李四 000002 20081028
李四 000002 20090108
;
run;
data b;
newd=.;
set a;run;
proc sort data=b;
by name d;
run;
data c;
set b;
format newd yymmdd10.;
by name;
if first.name then newd=d;
run;
data d(keep=name newd);set c;
where newd^=.;
run;
proc sort data=a;
by name d;
run;
data m;merge a d;by name;run;

藤椅
jppy2581 发表于 2015-12-9 20:29:55
我是来凑凑人气的
fzdkfpl.jimdo.com,chengdufpl.jimdo.com,changshafpl.jimdo.com,hefeifpl.jimdo.com,kmfpl.jimdo.com,haerbfpl.jimdo.com,sjzdkfpl.jimdo.com,chongqindkfpl.jimdo.com,ncdkfpl.jimdo.com,jinandkfpl.jimdo.com   

板凳
zensheran 在职认证  发表于 2015-12-9 20:45:12
木有人来自己顶一下

报纸
zensheran 在职认证  发表于 2015-12-9 20:45:45
自己顶一下啦~~~

地板
魔幻紫晶 发表于 2015-12-9 21:48:51
顶~~~~

7
yafeijojy 发表于 2015-12-10 00:01:59
data a;
input name$ stock$ d yymmdd10.;
format d yymmdd10.;
cards;
张三 000002 20080804
张三 000002 20091105
张三 000002 20100810
李四 000002 20071030
李四 000002 20081028
李四 000002 20090108
;
run;
data b;
newd=.;
set a;run;
proc sort data=b;
by name d;
run;
data c;
set b;
format newd yymmdd10.;
by name;
if first.name then newd=d;
run;
data d(keep=name newd);set c;
where newd^=.;
run;
proc sort data=a;
by name d;
run;
data m;merge a d;by name;run;

8
Tigflanker 发表于 2015-12-10 08:52:53
  1. data have;
  2.   informat rptdt1 yymmdd10.;
  3.   format rptdt1 yymmdd10.;
  4.   input name $ stkcd rptdt1 ;
  5.   cards;
  6. 张三 000002 2008/8/4
  7. 张三 000002 2009/11/5
  8. 张三 000002 2010/8/10
  9. 李四 000002 2007/10/30
  10. 李四 000002 2008/10/28
  11. 李四 000002 2009/1/8
  12.   ;run;

  13. proc sql;
  14.   create table want as
  15.   select *, rptdt1 - min(rptdt1) as cha from have
  16.   group by name, stkcd
  17.   order by name, stkcd, rptdt1
  18.   ;
  19. quit;
复制代码
跳过中间变量如何呢?你每组的第一个日期是最早日期吗?

9
zensheran 在职认证  发表于 2015-12-10 09:22:34
Tigflanker 发表于 2015-12-10 08:52
跳过中间变量如何呢?你每组的第一个日期是最早日期吗?
我把数据按照name stkcd rptdt1排序了,按照您的方法求出来了,谢谢!

10
Tigflanker 发表于 2015-12-10 09:52:55
zensheran 发表于 2015-12-10 09:22
我把数据按照name stkcd rptdt1排序了,按照您的方法求出来了,谢谢!
嗯呢,把分给楼上首答者吧
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
zensheran + 5 + 1 + 1 + 1 精彩帖子,谢谢你的帮助,系统只能评这么多.

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

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

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