楼主: teihohou
1199 3

help for proc sql [推广有奖]

  • 0关注
  • 0粉丝

大专生

13%

还不是VIP/贵宾

-

威望
0
论坛币
642 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
430 点
帖子
29
精华
0
在线时间
37 小时
注册时间
2010-11-22
最后登录
2024-3-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  • proc sql;
  • CREATE TABLE mysas.result as select id,
  • sum(T_visa) as total_visa,
  • sum(T_master) as total_master,
  • sum(T_pri) as total_pri,
  • sum(T_sec) as total_sec,
  • sum(T_limit) as total_limit
  • from mysas.temp Group by id;



SAS 显示,sum是for numeric, not char. 请问如何转换啊? 谢谢






数据
aggregation如下(请使用后面附上的dataset):
id   card_type    card_cat               card_limit
001    visa         primary                 3000
001    visa         supplementary      3500
001    master    supplementary      2000
002    master    primary                  5000
002    visa          primary                 4000
003    visa         supplementary      2000
004    master    supplementary      2500
card_type分别是visa卡和master卡,card_cat分别是主卡和附属卡,card_limit为信用额度。


题目要求: 将数据整合到一行数据只有一个唯一id,并计算:
total_visa:      有多少张visa卡

total_master:有多少张master

total_pri:       有多少张主卡

total_sec:      有多少张附属开

total_limit:     总共的信用额度


其结果如下:

                            id   total_visa  total_master  total_pri  total_sec  total_limit
                            ----------------------------------------------------------------
                            001           2             1          1          2         8500
                            002           1             1          2          0         9000
                            003           1             0          0          1         2000
                            004           0             1          0          1         2500
请写出实现的程序。

二维码

扫码加我 拉你入群

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

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

关键词:proc sql Help elp For sql

沙发
xulimei1986 发表于 2014-9-3 16:14:15 |只看作者 |坛友微信交流群
data test;
   input id $4. card_type $10. card_cat $20. card_limit;
   cards;
001    visa         primary                 3000
001    visa         supplementary      3500
001    master    supplementary      2000
002    master    primary                  5000
002    visa          primary                 4000
003    visa         supplementary      2000
004    master    supplementary      2500
;

proc sql;
  create table want as
  select id,
         sum(case when card_type='visa' then 1 else 0 end) as total_visa,
                 sum(case when card_type='master' then 1 else 0 end)as total_master,
                 sum(case when card_cat='primary' then 1 else 0 end)as total_pri,
                 sum(case when card_cat='supplementary' then 1 else 0 end)as total_sec,
                 sum(card_limit) as total_limit
        from test
        group by id;
quit;

使用道具

藤椅
teihohou 发表于 2014-9-3 21:29:57 |只看作者 |坛友微信交流群
thanks so much!!!

使用道具

板凳
ilovekate 发表于 2014-9-9 11:33:23 |只看作者 |坛友微信交流群
data test;
   input id 4. cardtype $10. card_cat $20. card_limit;
   cards;
001    visa         primary                 3000
001    visa         supplementary      3500
001    master    supplementary      2000
002    master    primary                  5000
002    visa          primary                 4000
003    visa         supplementary      2000
004    master    supplementary      2500
;
proc sort data=test;by id ;run;
data want(drop=cardtype card_cat card_limit);
set test;
by id ;
retain total_visa  total_master  total_pri  total_sec  total_limit 0;
if first.id then do; total_visa=0; total_master=0; total_pri=0;total_sec=0;total_limit=0;end;
total_limit=sum(total_limit, card_limit);
if cardtype='visa' then total_visa+1;else if cardtype='master' then total_master+1;
if card_cat='primary' then total_pri+1; else if card_cat='supplementary' then total_sec+1;
if last.id then output want;
run;

使用道具

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

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

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

GMT+8, 2024-4-25 23:31