楼主: aileendeng
3474 4

SAS中输出所有满足条件的值 [推广有奖]

  • 0关注
  • 0粉丝

大专生

61%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
349 点
帖子
32
精华
0
在线时间
33 小时
注册时间
2014-3-12
最后登录
2016-8-19

楼主
aileendeng 发表于 2014-6-30 14:02:45 |AI写论文
5论坛币
SAS新手,麻烦大家帮忙看一下这个问题:现在有两个表,
表a说明一件事情的起止时间:
code  begin          end
1       2010/03      2011/02
2       2004/09      2005/08
3       2004/02      2005/01
4
5

表b是我需要的表格,按照时间顺序排列


portfolio         code
2005/01
2005/02
2005/03
现在要求:if a.begin<=b.portfolio<=a.end,then 输出code。例如,b中2005/01在a中code2,code3的起止范围内,所以b中2005/01,code中输出2和3。输出最好是分开多列的。

不知道怎么写,请教一下各位!
谢谢啦!


关键词:Portfolio Portfoli begin code Port

沙发
huntdreamer 发表于 2014-6-30 15:30:48
proc sql;
create table c as
select b.portfolio,a.code
from a,b
where a.begin<=b.portfolio<=a.end;
quit;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
aileendeng + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
FB_FLORA 发表于 2014-6-30 16:16:38
楼上,赞!我和楼上一样
data a;
input code begin :$7. end :$7.;
datalines;
1       2010/03      2011/02
2       2004/09      2005/08
3       2004/02      2005/01
;
run;
data b;
input portfolio :$7.;
datalines;
2005/01
2005/02
2005/03
;
proc sql;
create table chk as
select *
from a , b
where begin<=portfolio<=end
;
quit;
proc sort data=chk1;
by portfolio code;
run;
data chk2;
set chk1;
by portfolio code;
if first.portfolio then nord=0;
nord+1;
run;
proc transpose data=chk1 out=wanted(drop=_name_) prefix=out;
by portfolio;
var code;
run;

板凳
aileendeng 发表于 2014-6-30 16:49:32
huntdreamer 发表于 2014-6-30 15:30
proc sql;
create table c as
select b.portfolio,a.code
啊明白意思了,谢谢您!


报纸
aileendeng 发表于 2014-6-30 16:53:47
FB_FLORA 发表于 2014-6-30 16:16
楼上,赞!我和楼上一样
data a;
input code begin :$7. end :$7.;
谢谢!先匹配再transpose,明白了!


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

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