楼主: dxystata
4430 3

如何去掉宏变量每个词末尾的数字 [推广有奖]

版主

已卖: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 发表于 2012-8-26 10:19:36 |AI写论文
10论坛币
%let vars=rbc1 rb1c2 wbc1 rbc2 wbc2 rbc2_2;
如何去掉宏变量每个词末尾的数字和_,并保留不重复的,顺序也不变,谢谢!
希望得到的宏变量的结果为rbc rb1c wbc。

最佳答案

ntsean 查看完整内容

试试看,只是结果的变量名的顺序有些不同 %let vars=rbc1 rb1c2 wbc1 rbc2 wbc2 rbc2_2; data a; str="&vars"; k=1; do while(scan(str,k) ne ""); str1=scan(str,k); newstr=substr(str1,1,length(translate(str1,' ','0123456789_'))); output; k=k+1; end; run; proc sql noprint; select distinct newstr into :vars1 separated by ' ' from a; quit; %put &vars1;
关键词:vars RBC let VaR ARS 结果 如何

本帖被以下文库推荐

沙发
ntsean 发表于 2012-8-26 10:19:37
试试看,只是结果的变量名的顺序有些不同

%let vars=rbc1 rb1c2 wbc1 rbc2 wbc2 rbc2_2;

data a;
str="&vars";
k=1;
do while(scan(str,k) ne "");
  str1=scan(str,k);
  newstr=substr(str1,1,length(translate(str1,' ','0123456789_')));
  output;
  k=k+1;
end;
run;

proc sql noprint;
  select distinct newstr into :vars1 separated by ' '
  from a;
quit;

%put &vars1;

藤椅
dxystata 发表于 2012-8-31 16:51:58
有没更简单的方法?谢谢!

板凳
jingju11 发表于 2012-9-1 04:35:05
  1. %macro rmN_/mINoperator;
  2.         %global rs; %let rs =;%*overwrite &rs. if exists outside;
  3.         %if not %length(&vars)%then%do; %put %nrstr(&var) is empty; %return; %end;
  4.         %do i =1 %to %sysfunc(countw(&vars));
  5.                 %let r =%sysfunc(substrn(%scan(&vars,&i),1,%sysfunc(findc(%scan(&vars,&i),a,a,-%length(&vars)))));
  6.                 %if &r ^= %then%if not (&r in 1 &rs) %then %let rs =&rs &r;
  7.         %end;        
  8. %mend rmN_;
复制代码

楼上的方法利用转换出来的缩短的长度来截断字符串,非常好。我的方法基本上把它翻译成宏。仅供参考。
jingju
more stories seen:
http://blog.sina.com.cn/s/blog_a3a9263601016623.html

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

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