SAS中文论坛

标题: 如何实现一对多的关联? [打印本页]

作者: shiyiming    时间: 2009-2-17 09:56
标题: 如何实现一对多的关联?
有两个数据集,都含有一个相同的变量,只是形式不同,当该变量在一个数据集中的值是唯一的,而在另一个数据集中值不唯一(出现重复)。此时应该如何实现关联,进行数据集的合并或其他操作呢?
譬如说我有两个数据集分别为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到一起去。
作者: Qiong    时间: 2009-2-17 14:49
标题: 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]
作者: Qiong    时间: 2009-2-17 14:51
标题: Re: 如何实现一对多的关联?
错了,merge的时候应该是
[code:2fy27rmf]
if not a then y=.;[/code:2fy27rmf]
作者: shiyiming    时间: 2009-2-18 11:47
标题: Re: 如何实现一对多的关联?
多谢了,O(∩_∩)O~




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2