楼主: dingdang15
2501 6

[求助]SAS编程中的一个有些难问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:20份资源

高中生

22%

还不是VIP/贵宾

-

威望
0
论坛币
283 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
205 点
帖子
16
精华
0
在线时间
23 小时
注册时间
2008-10-3
最后登录
2019-5-15

楼主
dingdang15 发表于 2009-6-20 13:41:12 |AI写论文
4论坛币
求助各位高人!~

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

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

拜谢!~大赞!~

关键词:SAS编程 上市公司 上市公 SAS

回帖推荐

lyceum 发表于2楼  查看完整内容

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 ...

本帖被以下文库推荐

沙发
lyceum 发表于 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;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

藤椅
dingdang15 发表于 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);
就能实现我所说的过程呢

板凳
dingdang15 发表于 2009-6-21 02:11:10
2# lyceum

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

报纸
dingdang15 发表于 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;

地板
sushe1527 发表于 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;

7
changchuan 发表于 2009-6-26 15:10:44
这个在oracle里面用row_number() 来实现再简单不过了
如果数据量不是很大的话

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 05:40