SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

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

求助一个宏程序。

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-7-30 16:39:57 | 只看该作者

求助一个宏程序。

/******************************************************************************************
请教各位:
问题是这样的:
有两个数据集,一个为原数据集,一个为目标数据集,都为一个变量(字符型),现在想看原始数据集中包含目标数据集的字符串,有则标识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
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-7-31 12:28:37 | 只看该作者

Re: 求助一个宏程序。

没看明白你写的,那个ii是什么?定义的i你也没用到,我看你的意思好像是将b表中的变量放到一些宏变量中,然后读取a表,判断a表中的每一个变量是不是出现了那些宏变量中的字符,你可以这样实现
proc sql noprint;
select b into : var separated by '|' from b;
run;
然后在你写的宏中,用%scan函数,以 | 为分割符,依次读取宏变量var中的字符,然后在用index去判断这个字符是不是在表a、中的变量中出现。
我记得论坛看到过类似的贴子,你不妨找找看。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-8-1 08:55:04 | 只看该作者

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;
可是好像还是行不通,
谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-8-1 15:13:42 | 只看该作者

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;
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 22:23 , Processed in 0.068251 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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