楼主: zhufengyuan
1118 2

[原创博文] 求每条记录出现的次数和时间[升级版] [推广有奖]

  • 0关注
  • 0粉丝

硕士生

57%

还不是VIP/贵宾

-

威望
0
论坛币
263 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
644 点
帖子
52
精华
0
在线时间
272 小时
注册时间
2009-9-8
最后登录
2022-1-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有一个程序问题想请教大家,以下是原始数据:
    number                date                  金额
    600203                2012-01-01        1
    600203                2012-01-15        2
    600204                2012-01-14        3
    600205                2012-01-04        4
    600205                2012-01-19       5
    600206                2012-01-03       5
    600206                2012-01-28       6
    600207                2012-01-05       7
    600208                2012-01-09       8

要求结果如下:
   number                date1           金额1     date2            金额2        date3    金额3           date4      金额4
    600203                2012-01-01    1     2012-01-15       2
    600204                2012-01-14    3                     
    600205                2012-01-04    4     2012-01-19        5
    600206                2012-01-03    5     2012-01-28        6
    600207                2012-01-05    7                  
    600208                2012-01-09    8               
比上次的帖子多了个金额,用单纯的tranpose只能做到输出date。
二维码

扫码加我 拉你入群

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

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

关键词:升级版 Number date pose 原始数据 number 记录 程序

沙发
maidenhan 发表于 2012-8-2 16:46:07 |只看作者 |坛友微信交流群
U can use macro and array to realize it.
For more information, check the following code.


data test1;
input number day $10. amount;
cards;
600203 2012-01-01 1
600203 2012-01-15 2
600204 2012-01-14 3
600205 2012-01-04 4
600205 2012-01-19 5
600205 2012-01-19 20
600205 2012-02-01 10
600206 2012-01-03 5
600206 2012-01-28 6
600207 2012-01-05 7
600208 2012-01-09 8
;run;
proc sql;
create table test2 as
select number, day, sum(amount) as amount
  from test1
  group by 1,2
  order by 1;
quit;
proc sql noprint;
select max(n) into:an
  from (select number, count(*) as n from test2 group by 1);
quit;
%macro test();
data test3(drop = day amount fid i);
format number 8.
     %do ii = 1 %to &an.;
    day_&ii. $10. amount_&ii. 8.
     %end;;
array d{&an.} $ %do ii = 1 %to &an.; day_&ii.   %end;;
array a{&an.} %do ii = 1 %to &an.; amount_&ii.   %end;;
retain d;
retain a;
set test2;
by number;
if first.number then do;
  fid = 0;
  do i = 1 to &an.;
   d{i} = '';
   a{i} = .;
  end;
end;
fid + 1;
d{fid} = day;
a{fid} = amount;
if last.number;
run;
%mend;
%test();

使用道具

藤椅
ziyenano 发表于 2012-8-2 18:06:29 |只看作者 |坛友微信交流群
分别转制,然后merge:
    proc transpose data=ex out=ex1(drop=_name_)
        prefix=date;
              by  number;
         var date;
    proc transpose data=ex out=ex2(drop=_name_)
        prefix=money;
               by  number;
        var money;
    data ex3;
        merge ex1 ex2;
                by number;
        run;


使用道具

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

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

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

GMT+8, 2024-9-21 09:04