楼主: yz7891
2456 7

[原创博文] 来看看 SAS 问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

86%

还不是VIP/贵宾

-

威望
0
论坛币
18 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
615 点
帖子
100
精华
0
在线时间
61 小时
注册时间
2010-3-30
最后登录
2019-6-3

楼主
yz7891 发表于 2010-3-31 11:54:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
表A Store
Store_id(PK)     City            Space
wh1          New York      370
wh2          Beijing           500
wh3          New York      200
wh4          London         400

表B Employee
Store_id(FK)       Emp_ID(PK)        Salary
wh1                       e1                         1220
wh1                       e3                         1210
wh2                       e4                         1250
wh2                       e6                         1230

1.需要取出每个CITY的SALARY最大值 以及相应的EMP_ID
2.取出总SALARY,总SPACE,store数量,employee数量SALARY最大数得出结果如下:
CITY           TOT.SALARY                  TOT.SPACE          #STORE            #EMPLOYEE           MAX SALARY
New York     2430(1220+1210)         570(370+200)                2                             2                            1220
Beijing         2480(1250+1230)          500                                 1                             2                            1250
London        0                                    400                                  1                            0                             0


第一个问题 我的做法是
先把2表合并
  1. data one;
  2. input Store_id $ City $ Space;
  3. cards;
  4. wh1 New.York 370
  5. wh2 Beijing 500
  6. wh3 New.York 200
  7. wh4 London 400
  8. ;
  9. data two;
  10. input Store_id $ Emp_ID $ Salary;
  11. cards;
  12. wh1 e1 1220
  13. wh1 e3 1210
  14. wh2 e4 1250
  15. wh2 e6 1230
  16. ;
  17. proc sort data=one;
  18. by Store_id;
  19. proc sort data=two;
  20. by Store_id;
  21. data total;
  22. merge one two;
  23. by Store_id;
  24. proc print data=total;
  25. run;
复制代码
然后取值
  1. data total1;
  2. set total;
  3. proc sort;
  4. by City;
  5. proc means data=total1 max;
  6. var Salary,Emp_ID;
  7. by City;
  8. output out=ototal1;
  9. proc print;
  10. run;
复制代码
因为我这里没有SAS软件,所以不能运行,麻烦有软件的朋友帮忙运行下,看看这个方法能不能成功 或者有谁有更好的方法,
第二个问题应该怎么下手?
二维码

扫码加我 拉你入群

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

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

关键词:Employee Beijing salary LONDON output employee 最大值 store

沙发
fzcoolbaby 发表于 2010-3-31 12:15:48
是这样的,$符号代表的是字符型变量,他只是一个表达方式而已,并非你程序中by语句后面的变量名,正确方式为:data one;

input Store_id $ City $ Space;

cards;

wh1 New.York 370

wh2 Beijing 500

wh3 New.York 200

wh4 London 400

;

data two;

input Store_id $ Emp_ID Salary;

cards;

wh1 e1 1220

wh1 e3 1210

wh2 e4 1250

wh2 e6 1230

;

proc sort data=one;

by Store_id ;

proc sort data=two;

by Store_id ;

data total;

merge one two;

by Store_id;

proc print data=total;

run;

本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewth ... amp;from^^uid=1137124

藤椅
南冰 发表于 2010-3-31 12:16:32
你这样合并肯定是可以的!但是看你想要什么结果吧?
一直怀有一个梦想,希望在不久的将来能读个博士,做做学术搞搞研究,饱尝学术的艰辛

板凳
yz7891 发表于 2010-3-31 12:19:52
我要的是从两个表中取出每个CITY中的最大SALARY 以前没有学过SAS 用SQL语句我能把它取出来,但是不知道SAS是怎么取出来的,我就去看pdf文档,然后想把2个表合并起来,然后再取其中的MAX.....不知道这个方法能不能行得通

意思就是取出来的值差不多是 New York 是1220(1220>1210) Beijing是1250(1250>1230)

看看这个代码
首先将2个表合并:
  1. data one;
  2. input Store_id $ City $ Space;
  3. cards;
  4. wh1 New.York 370
  5. wh2 Beijing 500
  6. wh3 New.York 200
  7. wh4 London 400
  8. ;
  9. data two;
  10. input Store_id $ Emp_ID $ Salary;
  11. cards;
  12. wh1 e1 1220
  13. wh1 e3 1210
  14. wh2 e4 1250
  15. wh2 e6 1230
  16. ;
  17. proc sort data=one;
  18. by Store_id;
  19. proc sort data=two;
  20. by Store_id;
  21. data total;
  22. merge one two;
  23. by Store_id;
  24. proc print data=total;
  25. run;
复制代码
然后执行找出最大值的命令:
  1. data total1;
  2. set total;
  3. proc sort;
  4. by City;
  5. proc means data=total1 max;
  6. var Salary;
  7. by City;
  8. output out=ototal1;
  9. proc print;
  10. run;
复制代码
这样可以行得通不?因为我这里没有SAS软件。。。只能想象……

报纸
cyh314 发表于 2010-3-31 13:50:09
看来不是想要的东西啊

地板
yz7891 发表于 2010-3-31 16:36:02
有人能帮忙下么?

7
crackman 发表于 2010-3-31 20:03:05
data one;
input Store_id $ City $ Space;
cards;
wh1 New.York 370
wh2 Beijing 500
wh3 New.York 200
wh4 London 400
;
data two;
input Store_id $ Emp_ID $ Salary;
cards;
wh1 e1 1220
wh1 e3 1210
wh2 e4 1250
wh2 e6 1230
;
proc sort data=one;
by Store_id;
proc sort data=two;
by Store_id;
data total;
merge one two;
by Store_id;
proc sort data=total;
by City salary;
data total1;
set total;
where salary ^=.;
proc sql;
create table  crackman as select city,emp_id,salary from total1 where salary in
(select max(salary) as maxsalary from total1 group by city) ;
run;

8
cz851218 发表于 2010-3-31 20:22:26
data one;
input Store_id $ City $ Space;
cards;
wh1 New.York 370
wh2 Beijing 500
wh3 New.York 200
wh4 London 400
;run;
data two;
input Store_id $ Emp_ID $ Salary;
cards;
wh1 e1 1220
wh1 e3 1210
wh2 e4 1250
wh2 e6 1230
;run;
proc sql;
create table three as
select one.store_id,one.city,max(one.space) as space,two.emp_id from one left join two
on one.store_id=two.store_id
group by city;
run;
create table four as
select one.city,sum(two.salary) as tsalary,sum(one.space) as tspace,count(one.city) as tcity,count(two.store_id) as temp,max(salary) as msalary from one left join two
on one.store_id=two.store_id
group by city;
quit;
我程序有点问题....

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

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