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;
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]作者: shiyiming 时间: 2010-7-5 15:02 标题: Re: 请教各位大侠一个SAS数据集生成的问题 [code:2ui4h6d1]data a;
id='w xx yyyy z';
output;
id='a w';
output;
run;
data b;
input list $;
cards;
w
z
yyyy
xx
a
;
proc sql noprint;
select list into:list separated by ',' from b;
quit;
proc fcmp outlib=work.func.ben;
function test(in $,list $) $ 50;
attrib out length=$50;
do i=1 to countc(list,',')+1;
if index(in,scan(list,i))=0 then out=cats(out,'0');
else out=cats(out,'1');
end;
return(out);
endsub;
run;
options cmplib=work.func;
data c;
set a;
temp=test(id,"&list");
run;[/code:2ui4h6d1]作者: shiyiming 时间: 2010-7-5 15:13 标题: Re: 请教各位大侠一个SAS数据集生成的问题 多谢斑竹!不过,非常遗憾,我的SAS版本不是9.2的,所以不能运行proc fcmp. 我还是想用DATA步.不知道你有没有更好的解决方法? 再次感谢你的热心!作者: shiyiming 时间: 2010-7-5 16:27 标题: Re: 请教各位大侠一个SAS数据集生成的问题 [code:1nx0w3gt]data a;
id='w xx yyyy z';
output;
id='a w';
output;
run;
data b;
input list $;
varname=cats('var',_n_);
value=_n_;
cards;
w
z
yyyy
xx
a
;
proc transpose data=b out=c(drop=_name_);
id varname;
idlabel list ;
var value;
run;
data c(drop=substr i);
length substr $50;
set a;
if _n_=0 then set c;
array arr{*} _numeric_;
do i=1 to dim(arr);
call label(arr(i),substr);
arr(i)=ifn(indexw(id,substr),1,0);
end;
run;[/code:1nx0w3gt]作者: shiyiming 时间: 2010-7-5 17:47 标题: Re: 请教各位大侠一个SAS数据集生成的问题 学习了 <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->作者: shiyiming 时间: 2010-7-6 11:12 标题: Re: 请教各位大侠一个SAS数据集生成的问题 多谢斑竹热心! 我比较了一下,比我的程序效率提高了近20%,非常感谢! 不过,对其中的transpose过程步在大数据的情况下还是心有余悸.但是可以用DATA步解决transpose的问题.再次感谢!