楼主: dxystata
5530 14

SAS %scan 空格分隔如何解析 [推广有奖]

11
jjtww 发表于 2013-12-21 19:20:46
1.把1/2变为1 2可以translate函数
2.建议学正则表达式吧,你开始想法就错了,宏不能滥用。

12
dxystata 发表于 2013-12-21 19:39:17
jjtww 发表于 2013-12-21 19:20
1.把1/2变为1 2可以translate函数
2.建议学正则表达式吧,你开始想法就错了,宏不能滥用。
你开始想法就错了,宏不能滥用。
能否说得清楚些吗?

13
jjtww 发表于 2013-12-21 20:40:53
dxystata 发表于 2013-12-21 19:39
你开始想法就错了,宏不能滥用。
能否说得清楚些吗?
我的意思是用正则表达式进行匹配。
  1. data _null_;
  2.         str='gage (gender,1/2) wgt)';
  3.         str_fliter=translate(str,'','(,/)');
  4.         put str_fliter=;
  5. run;


  6. data _null_;
  7.         str='gage (gender,1/2) wgt)';
  8.         re=prxparse("/(\w+)\s\((\w+).(\d)\/(\d)\)\s(\w+)\)/");
  9.         match=prxmatch(re,str);
  10.         if match then do;
  11.                                         s1=prxposn(re,1,str);s2=prxposn(re,2,str);s3=prxposn(re,3,str);
  12.                                         s4=prxposn(re,4,str);s5=prxposn(re,5,str);
  13.     end;
  14.         put s1= s2= s3= s4= s5=;
  15. run;
复制代码

14
dxystata 发表于 2013-12-22 21:21:34
zw612003 发表于 2013-12-15 22:47
用%qscan可以分割含括号。

%macro aaa(vars=);
如果vars=gage gender(1/2) wgt,如何写呢?
先分解为gage gender(1/2) wgt 3块, gender(1/2)进一步分解为gender 1/2

15
dxystata 发表于 2013-12-22 21:23:35
farmman60 发表于 2013-12-15 20:12
%macro aaa(vars=);
%let i=1;
%do %until (%qscan(&vars,&i,' ')=);
如果vars=gage gender(1/2) wgt,如何写呢?
先分解为gage gender(1/2) wgt 3块, gender(1/2)进一步分解为gender 1/2

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-30 03:20