|
|
楼主

楼主 |
发表于 2010-7-5 12:28:25
|
只看该作者
请教各位大侠一个SAS数据集生成的问题
比如,我现在有两个表:
data a;
id='w x y z';
output;
id='a w';
output;
run;
data b;
input list;
cards;
w
z
y
x
a
;
run;
我想得到如下的结果:
id v1 v2 v3 v4 v5
w x y z 0 1 1 1 1
a w 1 0 0 0 1
其中,V1-V5代表的分别是a;x;y;z;w. 0表示id不含有V1-V5的值,1表示含有.比如:第一个id中的v1=0,表示第一个id不包含字符a,其余类似. 我现在用HASH实现代码如下:
data w;
If 0 Then Set b;
If _N_=1 Then Do;
Declare Hash Share(Dataset:"b",ordered: 'yes');
declare hiter iter("Share");
Share.Definekey ('list');
Share.Definedata('list');
Share.Definedone();
End;
set a;
word=0;
retain word;
length ar1-ar5 3;
array ar[1:5] ;
length main_word1 $50;
rc=iter.first();
iter_cnt=0;
DO WHILE (rc=0);
match_count=0;
m=1;
do while (compress(scan(id,m,' ')) ne '');
main_word1=compress(scan(id,m,' '));
if (main_word1 eq list) then do;match_count+1;leave;end;
m+1;
end;
iter_cnt+1;
ar(iter_cnt)=match_count;
rc = iter.next();
END;
run;
[b:1ylxshz2]我的问题是: 还有没有别的更高效的方法(可以用HASH),因为我想比较一下不同方法之间的效率(时间).多谢各位大侠帮助![/b:1ylxshz2] |
|