楼主: 小春1988
7660 11

[原创博文] sas中sql语言问题 [推广有奖]

  • 0关注
  • 4粉丝

VIP1

已卖:3份资源

博士生

0%

还不是VIP/贵宾

-

威望
0
论坛币
495 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
2739 点
帖子
137
精华
0
在线时间
274 小时
注册时间
2008-9-16
最后登录
2021-12-18

楼主
小春1988 发表于 2010-3-12 15:47:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我想在sas中用sql实现如下问题:
例如有表一:
ID    age     sex
1      25       f
2      20      m
表二:
ID   product
1      a
1      b
2      a
1      b
2      a
如何合并成这样一个表
ID   age   sex     a      b
1     25    f         1      2
2     20    m       2      0
二维码

扫码加我 拉你入群

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

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

关键词:sql语言 sql Product produc prod sql语言 如何

回帖推荐

醉_清风 发表于6楼  查看完整内容

data a; input id:1. age:2. sex:$1.; cards; 1 25 f 2 20 m ; run; data b; input id:1. product:$1.; cards; 1 a 1 b 2 a 1 b 2 a ; run; proc sql; create table c as select A.* ,B.product ,count(*) as t from a A join b B on A.id=B.id group by A.id,age,sex,product ; quit; proc transpose data=c out=d(drop=_name_); by id age sex; var t; id product; r ...

本帖被以下文库推荐

沙发
edwardhuanghz 发表于 2010-3-12 15:57:45
非常简单,

藤椅
小春1988 发表于 2010-3-12 16:07:01
请教各位,能不能把程序写一下,谢谢大家

板凳
nkwilling 发表于 2010-3-12 16:19:04
proc sql;
create table t1 as
select
id
,product
,count(*) as cnt
from table2
group by 1,2
;
quit;

然后对上面的表进行转置,使用proc transpose程序,接下来使用merge语句就可以了。自己动动脑筋,别指望人家给现成的答案。

报纸
xiao198821 发表于 2010-3-12 16:21:56
1# 小春1988 你这个合并后的表好像没写对吧 ,具体是什么用意呢?

地板
醉_清风 发表于 2010-3-12 16:32:17
data a;
        input id:1. age:2. sex:$1.;
        cards;
1 25 f
2 20 m
;
run;

data b;
        input id:1. product:$1.;
        cards;
1 a
1 b
2 a
1 b
2 a
;
run;

proc sql;
        create table c as
        select   A.*
                        ,B.product
                        ,count(*) as t
        from a A
        join b B
        on A.id=B.id
        group by A.id,age,sex,product ;
quit;

proc transpose data=c out=d(drop=_name_);
        by id age sex;
        var t;
        id product;
run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

从来不需要想起 永远也不会忘记

7
小春1988 发表于 2010-3-12 17:14:57
谢谢大家!

8
bobguy 发表于 2010-3-13 12:36:50
醉_清风 发表于 2010-3-12 16:32
data a;
        input id:1. age:2. sex:$1.;
        cards;
1 25 f
2 20 m
;
run;

data b;
        input id:1. product:$1.;
        cards;
1 a
1 b
2 a
1 b
2 a
;
run;

proc sql;
        create table c as
        select   A.*
                        ,B.product
                        ,count(*) as t
        from a A
        join b B
        on A.id=B.id
        group by A.id,age,sex,product ;
quit;

proc transpose data=c out=d(drop=_name_);
        by id age sex;
        var t;
        id product;
run;
A little simplifaction will save you a transpose :).

proc sql;
  select a.* , a, b
  from a as a
  left join (select id,  sum(product='a') as a, sum(product='b') as b  from b group by id) c
        on A.id=C.id
;
  quit;
已有 1 人评分学术水平 收起 理由
醉_清风 + 1 优化

总评分: 学术水平 + 1   查看全部评分

9
醉_清风 发表于 2010-3-15 17:07:00
8# bobguy
细微之处见高下
学习了
从来不需要想起 永远也不会忘记

10
soporaeternus 发表于 2010-3-15 18:35:55
可能transpose的通用性更好些.....
当product类别不定的时候
虽然可以用宏变量来控制SQL的sum语句
但是觉得transpose更方便点......

虽然我更喜欢用SQL的方法......
Let them be hard, but never unjust

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

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