SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 649|回复: 3
打印 上一主题 下一主题

如何实现一对多的关联?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-2-17 09:56:10 | 只看该作者

如何实现一对多的关联?

有两个数据集,都含有一个相同的变量,只是形式不同,当该变量在一个数据集中的值是唯一的,而在另一个数据集中值不唯一(出现重复)。此时应该如何实现关联,进行数据集的合并或其他操作呢?
譬如说我有两个数据集分别为a和b,都含有共同变量ind
a数据集如下:
ind
_003_ca
_004_ca
....
b数据集含两个变量如下
ind y
k_001_q1 0.5
k_001_q1_a 0.3
k_001_q2 0.2
k_001_q2_a 0.7
k_002_q1 0.1
k_002_q1_a 0.2
k_002_q2 0.8
k_002_q2_a 0.7
k_003_q1 1.2
k_003_q1_a 1.4
k_003_q2 0.5
k_003_q2_a 0.4
k_004_q1 1.4
k_004_q1_a 1.1
k_004_q2 0.4
k_004_q2_a 0.7
.........

我想把a数据集中没有的个体其y显示为缺失值,该如何操作呢?
我的想法是先把中间的001、002...用字符函数抽出来,然后想按照抽出来的进行set。用以前byes大师指导的函数input(compress(ind,,'dk')可以很容易把a数据集中的抽取出来并且变为数值型,但是b数据集却难以凑效!难以set到一起去。
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
沙发
发表于 2009-2-17 14:49:33 | 只看该作者

Re: 如何实现一对多的关联?

没太看懂……
比较的是001,002之类的东西么?
如果是的话,试试看scan,然后merge.
[code:1j5zf15t]data a(keep=flag);
input ind $;
flag=scan(ind,1,'_');
cards;
_003_ca
_004_ca
;
run;
data b(index=(flag));
input ind $ y;
flag=scan(ind,2,'_');
cards;
k_001_q1 0.5
k_001_q1_a 0.3
k_001_q2 0.2
k_001_q2_a 0.7
k_002_q1 0.1
k_002_q1_a 0.2
k_002_q2 0.8
k_002_q2_a 0.7
k_003_q1 1.2
k_003_q1_a 1.4
k_003_q2 0.5
k_003_q2_a 0.4
k_004_q1 1.4
k_004_q1_a 1.1
k_004_q2 0.4
k_004_q2_a 0.7
;
run;
  
data c(drop=flag);
merge b a(in=a);
by flag;
if a then y=.;
run;[/code:1j5zf15t]
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
板凳
发表于 2009-2-17 14:51:18 | 只看该作者

Re: 如何实现一对多的关联?

错了,merge的时候应该是
[code:2fy27rmf]
if not a then y=.;[/code:2fy27rmf]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-2-18 11:47:27 | 只看该作者

Re: 如何实现一对多的关联?

多谢了,O(∩_∩)O~
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 08:53 , Processed in 0.068135 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表