楼主: Lakeyi
2432 13

[有偿编程] 筛选需要的数值 [推广有奖]

  • 0关注
  • 0粉丝

博士生

68%

还不是VIP/贵宾

-

威望
0
论坛币
1166 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4994 点
帖子
25
精华
0
在线时间
644 小时
注册时间
2011-8-19
最后登录
2019-11-6

50论坛币
数据.rar (90.61 KB) 本附件包括:
  • q434837243c6a20e3.sas7bdat

这是数据, 数据图片.jpg 我需要每个CD每年的最后一个日期的第三列值 比如STKCD 1中2009年最后一个是20091015 那么它的值是3105433762.00 ;再比如2010年中最后一个日期是20101231只需要他的值3485013762.00 总的来说就要每个ID每一年最后的值输出,如果某些年份没有则自动默认上一年的第三列值。有没有高手解决下这个问题?

数据图片.jpg (53.62 KB)

数据图片.jpg

关键词:stkcd 最后一个 STK 有没有

回帖推荐

jiangpinggu 发表于5楼  查看完整内容

如果同一个ID(你的ID指的应该是stkcd吧,如果不是,则假设id是stkcd,日期是shrchgdt)有多年数据,假设你的文档数据集名是abcd,则: data tmp; set abcd; yr=year(shrchgdt); run; proc sort data = tmp; by stkcd shrchgdt; run; data test(drop=yr); set tmp; by stkcd yr; if last.yr then output; run;
沙发
freerunning_sky 在职认证  发表于 2014-7-31 22:54:42 |只看作者 |坛友微信交流群
Lakeyi 发表于 2014-8-1 11:27
搞好了!有个问题就是 有的是从2006年开始的 有的是2001年  能不能都2001年开始
  1. data input1;
  2.         set input;/*你的数据集*/
  3.         SHRCHGYR=year(SHRCHGDT);
  4.         proc sort;by STKCD SHRCHGYR;
  5. run;

  6. data output;
  7.         set input1;
  8.         by STKCD SHRCHGYR;
  9.         retain SHRCHGDT1 NSHRTTL1;
  10.         if first.STKCD then do;
  11.                 first_year=SHRCHGYR;
  12.                 SHRCHGDT1=SHRCHGDT;
  13.                 NSHRTTL1=NSHRTTL;
  14.         end;
  15.         /*从2001年开始*/
  16.         if first_year>2001 then do;
  17.                 do i=2001 to first_year-1;
  18.                         SHRCHGDT1=mdy(12,31,i);
  19.                         output;
  20.                 end;
  21.         end;
  22.        
  23.         do i=year(SHRCHGDT1)+1 to SHRCHGYR-1;
  24.                 SHRCHGDT1=mdy(12,31,i);
  25.                 output;
  26.         end;

  27.         SHRCHGDT1=SHRCHGDT;
  28.         NSHRTTL1=NSHRTTL;


  29.         format SHRCHGDT1 YYMMDDN8.;

  30.         if last.SHRCHGYR then output;

  31.         /*如果需要到2012结束,不需要请注释掉*/
  32.         if last.STKCD then do;
  33.                 do i=SHRCHGYR+1 to 2012;
  34.                         SHRCHGDT1=mdy(12,31,i);
  35.                         output;
  36.                 end;
  37.         end;
  38.        
  39.         keep STKCD SHRCHGDT1 NSHRTTL1;
  40. run;
  41.                
复制代码

使用道具

藤椅
Lakeyi 发表于 2014-7-31 23:40:00 |只看作者 |坛友微信交流群
求高手知道,可以提价噢=。=

使用道具

板凳
jiangpinggu 发表于 2014-7-31 23:54:31 |只看作者 |坛友微信交流群
请排序后用last.x语句输出便可(你文档的日期变量是shrchgdt):

proc sort data = abcd;
by stkcd shrchgdt;
run;

data test;
  set abcd;
  by stkcd;
  if last.stkcd then output;
run;

使用道具

报纸
Lakeyi 发表于 2014-8-1 00:03:24 |只看作者 |坛友微信交流群
jiangpinggu 发表于 2014-7-31 23:54
请排序后用last.x语句输出便可(你文档的日期变量是shrchgdt):

proc sort data = abcd;
不是的,我需要每个ID 每年的的最后一个日期  不是就一个日期

使用道具

地板
jiangpinggu 发表于 2014-8-1 01:10:18 |只看作者 |坛友微信交流群
如果同一个ID(你的ID指的应该是stkcd吧,如果不是,则假设id是stkcd,日期是shrchgdt)有多年数据,假设你的文档数据集名是abcd,则:
data tmp;
  set abcd;
  yr=year(shrchgdt);
run;

proc sort data = tmp;
by stkcd shrchgdt;
run;

data test(drop=yr);
  set tmp;
  by stkcd yr;
  if last.yr then output;
run;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Lakeyi + 5 + 2 + 2 + 2 精彩帖子

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

使用道具

7
learsaas 发表于 2014-8-1 08:45:45 |只看作者 |坛友微信交流群
呵呵,完成了一半,还要你补缺失年份呢?

使用道具

8
Lakeyi 发表于 2014-8-1 09:41:03 |只看作者 |坛友微信交流群
jiangpinggu 发表于 2014-8-1 01:10
如果同一个ID(你的ID指的应该是stkcd吧,如果不是,则假设id是stkcd,日期是shrchgdt)有多年数据,假设你的 ...
大哥还能不能补充年份呢 没有的年份是默认上一年的

使用道具

9
freerunning_sky 在职认证  发表于 2014-8-1 11:02:48 |只看作者 |坛友微信交流群
  1. data input1;
  2.         set input;/*你的数据集*/
  3.         SHRCHGYR=year(SHRCHGDT);
  4.         proc sort;by STKCD SHRCHGYR;
  5. run;

  6. data output;
  7.         set input1;
  8.         by STKCD SHRCHGYR;
  9.         retain tmp_year tmp_amt;
  10.         if first.STKCD then do;
  11.                 tmp_year=3000;
  12.                 tmp_amt=0;
  13.         end;
  14.         do while(tmp_year<SHRCHGYR-1);
  15.                 tmp_year=tmp_year+1;
  16.                 SHRCHGDT1=mdy(12,31,tmp_year);
  17.                 NSHRTTL1=tmp_amt;
  18.                 output;
  19.         end;

  20.         tmp_year=SHRCHGYR;
  21.         tmp_amt=NSHRTTL;

  22.         SHRCHGDT1=SHRCHGDT;
  23.         NSHRTTL1=NSHRTTL;

  24.         format SHRCHGDT1 YYMMDDN8.;

  25.         if last.SHRCHGYR then output;
  26.        
  27.         keep STKCD SHRCHGDT1 NSHRTTL1;
  28. run;
  29.                
复制代码

使用道具

10
Lakeyi 发表于 2014-8-1 11:25:04 |只看作者 |坛友微信交流群
freerunning_sky 发表于 2014-8-1 11:02
报错咧=。=

使用道具

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

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

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

GMT+8, 2024-4-27 13:21