SAS中文论坛

标题: 如何去除macro变量中重复的字符? [打印本页]

作者: shiyiming    时间: 2010-4-9 12:27
标题: 如何去除macro变量中重复的字符?
比如:
%let aaa=a1 a1 a a111 a1 b;
如何去掉重复的,aaa解析为a1 a a111 b,谢谢!
作者: shiyiming    时间: 2010-4-9 13:00
标题: Re: 如何去除macro变量中重复的字符?
首先你要指定分隔符,然后根据分隔符从字符串中依次读取子串,如果前边有了该子串,则不把此次读取的子串追加到一个宏变量中,否则追加到一个宏变量中。
作者: Qiong    时间: 2010-4-9 14:21
标题: Re: 如何去除macro变量中重复的字符?
读成dataset,nodup,再放回宏变量
作者: shiyiming    时间: 2010-4-9 16:47
标题: Re: 如何去除macro变量中重复的字符?
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2010-4-10 00:01
标题: Re: 如何去除macro变量中重复的字符?
if you use SAS 9.2 then the code may be working:

[code:2o2zt2wg]%macro deStringMcr/mindelimiter = '';options minoperator;       
        %local i string; %global new_aaa;
        %let i = 2;        %let new_aaa = %scan(&amp;aaa, 1);
        %do%while(%scan(&amp;aaa, &amp;i) ne );
                %let string = %scan(&amp;aaa, &amp;i);               
                %if not (&amp;string  in &amp;new_aaa)  %then %let new_aaa = &amp;new_aaa &amp;string;
                %let i = %eval(&amp;i+1);
        %end;        
%mend deStringMcr;

%let aaa = a1 a1     a a111 a1 b;
%deStringMcr
; %put &amp;new_aaa;[/code:2o2zt2wg]
作者: shiyiming    时间: 2010-4-10 10:11
标题: Re: 如何去除macro变量中重复的字符?
1、更新了一下
2、鸣谢国际大咖jingju11
[code:3nnxqk5y]%macro test(in_str);
   %let dlm=%str( );
   %let in_str=%upcase(&amp;in_str);
   %let out_str=%scan(&amp;in_str,1,&amp;dlm);
   %let i=2;
   %let sub_str=%scan(&amp;in_str,&amp;i,&amp;dlm);
   %do %while(&amp;sub_str ne);
          %if %sysfunc(indexw(&amp;out_str,&amp;sub_str,&amp;dlm))=0 %then %let out_str=&amp;out_str &amp;sub_str;
          %let i=%eval(&amp;i+1);
          %let sub_str=%scan(&amp;in_str,&amp;i,&amp;dlm);
   %end;
   &amp;out_str
%mend;

%let aaa=%test(a1 a1   a a111 A1 b 1);
%put NOTE&#58;aaa=&amp;aaa;[/code:3nnxqk5y]
作者: shiyiming    时间: 2010-4-21 08:12
标题: Re: 如何去除macro变量中重复的字符?
有更好的方法吗?




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