楼主: BraveMadMan
3143 7

[问答] 搜索并替换一个宏变量的内容 [推广有奖]

  • 1关注
  • 6粉丝

已卖:97份资源

讲师

16%

还不是VIP/贵宾

-

威望
0
论坛币
966 个
通用积分
6.3763
学术水平
26 点
热心指数
42 点
信用等级
10 点
经验
7812 点
帖子
300
精华
0
在线时间
552 小时
注册时间
2005-8-11
最后登录
2021-5-20

楼主
BraveMadMan 发表于 2011-1-16 02:05:58 |AI写论文
5论坛币
现有一个宏变量, varslist, 内容为“Model & Variable & _name_ & South_Afri & U_K_ & U_S_”。如何把里边的“_” 替换为 空格" "。多谢各位高手。

现在  %put &varslist的结果为:
Model & Variable & _name_ & South_Afri & U_K_ & U_S_

目标 %put &varslist的结果为:
Model & Variable & name & South Afri & U K & U S
关键词:Variable south model name vars 变量 搜索

本帖被以下文库推荐

Don't get lost in technical details. What is the big picture?

沙发
baoaibaobao 发表于 2011-1-16 02:05:59
  1. %let varlist=Model & Variable & _name_ & South_Afri & U_K_ & U_S_;
  2. %let var=%sysfunc(compbl(%sysfunc(translate(&varlist,' ','_'))));
  3. %put &var;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
BraveMadMan + 1 + 1 + 1 多谢精彩程序

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
BraveMadMan 发表于 2011-1-16 02:10:12
宏变量, varslist,里存的是一个SAS数据库里的变量的名字。如果可以通过修改数据库变量的名字实现也可以。
Don't get lost in technical details. What is the big picture?

板凳
BraveMadMan 发表于 2011-1-16 02:39:39
找到一段code。不过那个空格加不上。不过也无所谓了。

来源:http://www.sascommunity.org/wiki ... ng_Replace_Function
                                                                              
%macro strreplace(in_what, from_what, to_what);   
    %global s;
    %let s=&in_what;                                                            
    %do %while(%index(&s, &from_what) > 0);                  
        %let pos_fw = %index(&s, &from_what);
        %if &pos_fw > 0 %then %do;                                             
            %let l_str = %substr(&s, 1, %eval(&pos_fw - 1));              
            %let r_str = %substr(&s, %eval(&pos_fw + %length(&from_what)));     
            %let s=&l_str&to_what&r_str;                                       
        %end;                                                                  
    %end;                                                                       
   %let in_what= &s;                                                                          
%mend;   

%let str1=Model & Variable & _name_ & South_Afri & U_K_ & U_S_;
%let ts=%strreplace(&str1, _, );

%put &s;
Don't get lost in technical details. What is the big picture?

报纸
nhzbingbing 在职认证  发表于 2011-1-16 03:26:35
看不大懂呢。呵呵。看来要好好好好的学习啊

地板
liudeng2005 发表于 2011-1-16 09:28:20
又见牛人,未测试,但往上的2个人的思路都很有意思
我就是我@!

7
elek.me 发表于 2011-1-16 12:44:07
这种情况用translate和tranwrd都可以~  如果想去掉多余空格,compbl函数需要用上
  1. %let varlist=Model & Variable & _name_ & South_Afri & U_K_ & U_S_;
  2. %let var=%sysfunc(tranwrd(&varlist.,_, ));
  3. %put &var;
复制代码
处理文本的话,我比较喜欢用正则。
  1. %let varlist=Model & Variable & _name_ & South_Afri & U_K_ & U_S_;
  2. %let re=%sysfunc(prxparse(s/ *\_ */ /));
  3. %let var=%sysfunc(prxchange(&re.,-1,&varlist.));
  4. %put &var;
复制代码
我的博客: http://elek.me/sas
联系我: http://about.me/elek

8
论坛数据分析 发表于 2011-1-17 08:53:01
看看
老夫聊发少年狂

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 03:22