SAS中文论坛
标题:
求助一个宏程序。
[打印本页]
作者:
shiyiming
时间:
2008-7-30 16:39
标题:
求助一个宏程序。
/******************************************************************************************
请教各位:
问题是这样的:
有两个数据集,一个为原数据集,一个为目标数据集,都为一个变量(字符型),现在想看原始数据集中包含目标数据集的字符串,有则标识c=1。
例如:
原始数据集为aa:变量a的观测有heew zhao niha
目标数据集为bb:变量b的观测有he ao
则结果数据集cc为
a c
heew 1
zhao 1
niha .
我写了一个程序,其中用到宏,自己不大会,出错,请各位帮着看看,谢谢
****************************************************************************************/
data aa;
input a $ @@;
cards;
heaa zhao wang
;
run;
data bb;
input b $ @@;
j+1;
k=put(j,1.);
cards;
an he
;
run;
data _null_;
set bb end=last;
i+1;
if last then call symput('total',i);
run;
data _null_;
set bb;
call symput('ar'!!k,b);
run;
%put _user_;
%macro he;
%local i ii;
%do i=1 %to &total;
data cc;
set aa;
if index(a,symget('ar'!!&ii)) then nnn=symget('ar'!!&ii);
run;
%end;
%mend;
%he
作者:
shiyiming
时间:
2008-7-31 12:28
标题:
Re: 求助一个宏程序。
没看明白你写的,那个ii是什么?定义的i你也没用到,我看你的意思好像是将b表中的变量放到一些宏变量中,然后读取a表,判断a表中的每一个变量是不是出现了那些宏变量中的字符,你可以这样实现
proc sql noprint;
select b into : var separated by '|' from b;
run;
然后在你写的宏中,用%scan函数,以 | 为分割符,依次读取宏变量var中的字符,然后在用index去判断这个字符是不是在表a、中的变量中出现。
我记得论坛看到过类似的贴子,你不妨找找看。
作者:
shiyiming
时间:
2008-8-1 08:55
标题:
Re: 求助一个宏程序。
谢谢的回复.
你说的接下来是不是这样
%macro aa;
%local i;
%do i=1 %to 3;
%let varr=%sysfunc(scan(&var,&i),'|');
data aa;
set aa;
if index(a,&varr)>0 then c=↕
run;
%end;
%mend;
可是好像还是行不通,
谢谢!
作者:
shiyiming
时间:
2008-8-1 15:13
标题:
Re: 求助一个宏程序。
主要是你写的有些地方语法不对。。。
%macro search;
%let i=1;
data result;
set aa;
%do %while(%scan(&var,&i,'|') ne );
%let str=%scan(&var,&i,'|');
if index(name,"&str") gt 0 then do;
c="&str";
output;
end;
%let i=%eval(&i+1);
%end;
run;
%mend;
%search;
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2