SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 786|回复: 6
打印 上一主题 下一主题

如何去除macro变量中重复的字符?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-4-9 12:27:48 | 只看该作者

如何去除macro变量中重复的字符?

比如:
%let aaa=a1 a1 a a111 a1 b;
如何去掉重复的,aaa解析为a1 a a111 b,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-4-9 13:00:04 | 只看该作者

Re: 如何去除macro变量中重复的字符?

首先你要指定分隔符,然后根据分隔符从字符串中依次读取子串,如果前边有了该子串,则不把此次读取的子串追加到一个宏变量中,否则追加到一个宏变量中。
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
板凳
发表于 2010-4-9 14:21:56 | 只看该作者

Re: 如何去除macro变量中重复的字符?

读成dataset,nodup,再放回宏变量
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-4-9 16:47:12 | 只看该作者

Re: 如何去除macro变量中重复的字符?

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-4-10 00:01:04 | 只看该作者

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

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-4-10 10:11:28 | 只看该作者

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

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-4-21 08:12:45 | 只看该作者

Re: 如何去除macro变量中重复的字符?

有更好的方法吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 14:07 , Processed in 0.140073 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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