全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2474 6
2009-06-20
悬赏 4 个论坛币 未解决
求助各位高人!~

我要实现这么一个过程,就是比如有2008年上市的100个公司,我想把每个公司中找出来一个匹配,匹配的对象是2006年以前所有上市公司中与与2008年上市那个公司市值最接近的一个。例如,A公司在2008年上市,市值是一百万。我先找出在2006年以前上市的所有公司中,在2008年时市值最近接一百万的一个公司,例如B公司99万,C公司102万,就是要找到B公司。如此实现100个公司所有公司都自动挑出一个匹配对象。

数据我都有,就是请问SAS编程过程怎么实现?语句怎么写?或者是大概什么思路有什么过程?~~

拜谢!~大赞!~
二维码

扫码加我 拉你入群

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

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

全部回复
2009-6-20 16:56:28
Try this one please

data data1;
input company2008 $  value1;
datalines;
A 100
D  98
E  103
;

data data2;
input company2006 $  value2;
datalines;
B  99
C  102
F 110
G 89
;

proc sql;
create table match as select *, abs(value1-value2) as value

from data1, data2;

proc sort data=match; by value;
data match; set match;by value;
retain value;
if first.id then value=1; else value+1;
if value in (1,2);
drop value;
run;
quit;
二维码

扫码加我 拉你入群

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

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

2009-6-21 02:01:19
2# lyceum

实在太感谢你了!!!太厉害了这么几句就给实现了~~~
有一个问题,就是请问first.id表示什么呢?id是什么?
这个以前的程序看懂了
但是为什么
if first.id then value=1; else value+1;
if value in (1,2);
就能实现我所说的过程呢
二维码

扫码加我 拉你入群

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

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

2009-6-21 02:11:10
2# lyceum

嗯不好意思这个程序貌似还是有些问题吧。比如如果把E改成113,那按理说应该找到的匹配对象F是110,可运行这个程序,找不出来啊~~~
二维码

扫码加我 拉你入群

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

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

2009-6-21 10:02:39
2# lyceum

请问我觉得是不是可以这样啊?

proc sort data=match; by company2008 value;
data match; set match;by company2008;
retain value;
if first.company2008;
drop value;
run;
quit;
二维码

扫码加我 拉你入群

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

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

2009-6-21 13:50:49
dingdang15 发表于 2009-6-21 10:02
2# lyceum

请问我觉得是不是可以这样啊?

proc sort data=match; by company2008 value;
data match; set match;by company2008;
retain value;
if first.company2008;
drop value;
run;
quit;
不可以,你这value的差值正好是1,所以就对了,而且没有考虑重复的情况, 你可以测试我提供的数据
弱弱的问下,钱还在不?
-----------------------------
data data1;
input company2008 $  value1;
datalines;
A 100
D  98
E  113
;
data data2;
input company2006 $  value2;
datalines;
B  99
C  102
F 110
G 97
H 97
K 116
M 116
;
proc sql;
create table match as select *, abs(value1-value2) as value
from data1, data2;
create table youwant as
select distinct * from match
   group by company2008
   having value=min(value);
quit;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群