楼主: funwin
2409 8

[原创博文] 请教高手,有这么一组数据:co公司date1报告日期date2备案日期shares股份数 [推广有奖]

  • 0关注
  • 2粉丝

硕士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
177 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
2256 点
帖子
192
精华
0
在线时间
131 小时
注册时间
2007-11-7
最后登录
2016-1-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教高手,我有这么一组数据:co-公司,date1-报告日期, date2-备案日期, shares-股份数
Co     date1     date2  shares
1001 199406 199409 600
1001 199406 199412 1200
1001 199406 199503 1200
1001 199503 199506 1200
1001 199503 199509 1200
1005 199110 199203 6500
1005 199110 199206 6500
1005 199204 199206 7500
1005 199204 199209 7500
第一步想增加一个变量date3,让其等于每个公司每个报告日期的最后一个备案日期(date2);
Co       date1    date2 shares date3
1001 199406 199409 600 199503
1001 199406 199412 1200 199503
1001 199406 199503 1200 199503
1001 199503 199506 1200 199509
1001 199503 199509 1200 199509
1005 199110 199203 6500 199206
1005 199110 199206 6500 199206
1005 199204 199206 7500 199209
1005 199204 199209 7500 199209
第二步,只保留每个公司每个报告日期的第一行数据:
Co    date1     date2 shares date3
1001 199406 199409 600 199503
1001 199503 199506 1200 199509
1005 199110 199203 6500 199206
1005 199204 199206 7500 199209
真正目的就是:只需要每个公司(co)每个报告日期(date1)的第一个备案日期(date2)的数据(就是每个公司(co)每个报告日期(date1)的第一行数据),但是还想知道每个公司每个报告日期的最后一个备案日期是几号。上面只是摘了一组数据出来,原数据很大。

烦请高手帮忙,如何能达到这个目的?
二维码

扫码加我 拉你入群

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

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

关键词:Shares share date 请教高手 ATE

回帖推荐

soporaeternus 发表于2楼  查看完整内容

希望对你有帮助

guoluo 发表于4楼  查看完整内容

data a; input Co date1:yymmn6. date2 :yymmn6. shares; format date1 date2 yymmn6.; datalines; 1001 199406 199409 600 1001 199406 199412 1200 1001 199406 199503 1200 1001 199503 199506 1200 1001 199503 199509 1200 1005 199110 199203 6500 1005 199110 199206 6500 1005 199204 199206 7500 1005 199204 199209 7500 ; run; proc sort data=a; by co date1 descending date2; run; ...

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-4-1 10:20:35 |只看作者 |坛友微信交流群
  1. data test;
  2. input Co_1 $     date1_1:yymmn6. date2_1:yymmn6.  shares_1;
  3. format date1_1 date2_1 yymmn6.;
  4. datalines;
  5. 1001 199406 199409 600
  6. 1001 199406 199412 1200
  7. 1001 199406 199503 1200
  8. 1001 199503 199506 1200
  9. 1001 199503 199509 1200
  10. 1005 199110 199203 6500
  11. 1005 199110 199206 6500
  12. 1005 199204 199206 7500
  13. 1005 199204 199209 7500
  14. ;
  15. run;

  16. proc sort data=test;by Co date1;run;quit;

  17. data test1;
  18.         retain Co date1 date2 shares date3;
  19.         set test;
  20.         by Co_1 date1_1;
  21.         if first.date1_1 then do;
  22.                 Co=Co_1;
  23.                 date1=date1_1;
  24.                 date2=date2_1;
  25.                 shares=shares_1;
  26.         end;
  27.         if last.date1_1 then do;
  28.                 date3=date2_1;
  29.                 output;
  30.         end;
  31.         keep Co date1 date2 shares date3;
  32.         format date1 date2 date3 yymmn6.;


  33. run;
复制代码
希望对你有帮助
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

Let them be hard, but never unjust

使用道具

藤椅
醉_清风 发表于 2010-4-1 10:21:52 |只看作者 |坛友微信交流群
向2楼学习 呵呵
从来不需要想起 永远也不会忘记

使用道具

板凳
guoluo 发表于 2010-4-1 10:40:30 |只看作者 |坛友微信交流群
data a;
input Co date1:yymmn6. date2 :yymmn6. shares;
format date1 date2 yymmn6.;
datalines;
1001 199406 199409 600
1001 199406 199412 1200
1001 199406 199503 1200
1001 199503 199506 1200
1001 199503 199509 1200
1005 199110 199203 6500
1005 199110 199206 6500
1005 199204 199206 7500
1005 199204 199209 7500
;
run;

proc sort data=a;
  by co date1 descending date2;
run;

data a;
  set a;
  by co date1 descending date2;
  retain date3;
  if first.date1 then date3=date2;
  if last.date1;
  format date3 yymmn6.;
run;
已有 4 人评分经验 论坛币 学术水平 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
soporaeternus + 1 好想法,学习了
crackman + 100 + 1 + 1 精彩帖子
醉_清风 + 1 + 1 很好用

总评分: 经验 + 3  论坛币 + 103  学术水平 + 3  热心指数 + 2   查看全部评分

使用道具

报纸
soporaeternus 发表于 2010-4-1 10:46:27 |只看作者 |坛友微信交流群
4楼的办法好,学习了
Let them be hard, but never unjust

使用道具

地板
醉_清风 发表于 2010-4-1 10:56:42 |只看作者 |坛友微信交流群
4楼很简洁 又见识了retain的好用
从来不需要想起 永远也不会忘记

使用道具

7
sushe1527 发表于 2010-4-1 15:04:59 |只看作者 |坛友微信交流群
下面这个效率低
proc sql;
select distinct(co) , date1, max(date2) as date3 format yymmn6.  from a group co,date1;
quit;

使用道具

8
crackman 发表于 2010-4-1 18:30:55 |只看作者 |坛友微信交流群
data crackman;
input co date1 date2 shares@;
cards;
1001 199406 199409 600
1001 199406 199412 1200
1001 199406 199503 1200
1001 199503 199506 1200
1001 199503 199509 1200
1005 199110 199203 6500
1005 199110 199206 6500
1005 199204 199206 7500
1005 199204 199209 7500
;
run;
proc sql;
create table result  as  select co,date1,date2,shares , max(date2) as date3 from crackman group by co,date1;
data crackman1;
set result;
if date2=date3;
run;
proc print;
run;

使用道具

9
funwin 发表于 2010-4-2 03:59:57 |只看作者 |坛友微信交流群
谢谢各位的帮忙,还是比较喜欢四楼的方法。
sql语句太费时间了,由于我的数据非常大,用data语句相对更省时间。
无论如何,都非常感谢各位!!!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 20:24