楼主: dxystata
5995 13

如何对宏变量进行替换处理 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2014-11-2 10:03:51 |AI写论文
50论坛币
%macro aaa(y=);
%let x=\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42;

%put &x;

%mend
y指定为1, 将宏变量的第1个\aaa\bbb替换为空,x解析为\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42;
y指定为2, 将宏变量的前2个\aaa\bbb替换为空,x解析为\ccc21\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42;



关键词:Macro End let CRO acr 如何

本帖被以下文库推荐

沙发
farmman60 发表于 2014-11-2 10:03:52
  1. %macro aaa(y=);
  2. %let x=\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42;
  3. %let expressid=%sysfunc(prxparse(s/\\aaa\\bbb//));
  4. %let x=%sysfunc(prxchange(&expressid,&y,%str(&x)));
  5. %put &x;
  6. %mend;

  7. %aaa(y=1)
  8. %aaa(y=2)
复制代码
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 40 + 2 + 2 观点有启发

总评分: 经验 + 40  学术水平 + 2  热心指数 + 2   查看全部评分

藤椅
低调流年 发表于 2014-11-2 10:24:32
学习学习

板凳
pobel 在职认证  发表于 2014-11-2 10:57:02
%macro aaa(y=);
%let x=\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42;

%do i=1 %to &y;
     %let pos=%index(&x,\aaa\bbb);
     %if &pos=1 %then %let x=%substr(&x,9);
         %else %if &pos %then %let x=%substr(&x,1,&pos-1)%substr(&x,&pos+8);
%end;

%put &x;
%mend;
已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
dxystata + 40 + 2 + 1 观点有启发
Eternal0601 + 3 + 3 + 3 精彩帖子

总评分: 经验 + 40  学术水平 + 5  热心指数 + 4  信用等级 + 3   查看全部评分

报纸
huangpengfei 发表于 2014-11-2 22:09:01
%macro want(y=);
%let x=%str(\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42);
data a;
        c=count("&x","\aaa\bbb");
        do i=&y to &y;
                d=compress(tranwrd(substr("&x",1,find("&x","\aaa\bbb",i)-1),"\aaa\bbb",""))||
                        substr("&x",find("&x","\aaa\bbb",i)+8);
        end;
run;
%mend;
%want(y=2);

你可以根据你的需要,对宏程序中的函数进行调整

已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 40 + 2 + 2 观点有启发

总评分: 经验 + 40  学术水平 + 2  热心指数 + 2   查看全部评分

地板
Eternal0601 发表于 2014-11-2 22:40:33
huangpengfei 发表于 2014-11-2 22:09
%macro want(y=);
%let x=%str(\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42);
data a;
提供了另外一种思路,但程序是有bug的

7
dxystata 发表于 2014-11-3 00:17:08
pobel 发表于 2014-11-2 10:57
%macro aaa(y=);
%let x=\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42;
\aaa\bbb之间字符的长度不固定

8
dxystata 发表于 2014-11-3 00:18:29
huangpengfei 发表于 2014-11-2 22:09
%macro want(y=);
%let x=%str(\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42);
data a;
\aaa\bbb\ 之间字符的长度不固定

9
dxystata 发表于 2014-11-3 06:51:21

谢谢!

10
dxystata 发表于 2014-11-3 06:51:52
pobel 发表于 2014-11-2 10:57
%macro aaa(y=);
%let x=\aaa\bbb\ccc21\aaa\bbb\ccc23\aaa\bbb\ccc35\aaa\bbb\ccc42;

%do i=1 %to &y;
     %let pos=%index(&x,\aaa\bbb);
     %if &pos=1 %then %let x=%substr(&x,9);
         %else %if &pos %then %let x=%substr(&x,1,&pos-1)%substr(&x,&pos+8);
%end;

%put &x;
%mend;
谢谢!

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

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