使用“查找和替换”在SAS中添加“引用”

时间:2016-11-15 08:42:02

标签: replace sas find

我在SAS程序中有很多6位数字:

898300 898311 898312 898313 898314 898315 898316 898317 898321 898322 898323 898324 898331 898332 898333 898341 898342 898343 898400 898401 898402 898403 898500 898501 898502 898503 898600 898601 898602 898603 898604 898605 898606 898607 898608 898609 898610 898611 898612 898613 898614 898615 898616 898617 898700 898701 898702 898703 898704 898705 898706 898800 898801 898901

我想快速查找并使用Ctrl + H进行替换,以便将“6位数字”引用为“引用”:

“898300”“898311”“898312”......

我认为进行正则表达式搜索是可行的方法,但我无法确定具体的语法。谁知道该怎么做?

由于

2 个答案:

答案 0 :(得分:0)

我确定这可以在记事本中完成(用一个替换所有多个空格,然后用" "替换一个空格),但是当你标记SAS时,这就是SAS解决方案。

首先编译这个宏:

/***
  Converts a space delimited string into one with custom quotes / delimiters

  @usage
    %put %get_quoted_str(in_str=blah   blah  blah
      ,dlm=%str(,)
      ,quote=%str(%')  );
    returns:  'blah','blah','blah'
  @@

***/
%macro get_quoted_str(IN_STR=,DLM=,QUOTE=);
  %local i item buffer;
  %let i=1;
  %do %while (%qscan(&IN_STR,&i,%str( )) ne %str() ) ;
    %let item=%scan(&IN_STR,&i,%str( ));
    %if %bquote(&QUOTE) ne %then %let item=&QUOTE%trim(&item)&QUOTE;
    %else %let item=%trim(&item);

    %if (&i = 1) %then %let buffer =&item;
    %else %let buffer =&buffer&DLM&item;

    %let i = %eval(&i+1);
  %end;

  &buffer

%mend;

然后打电话如下:

%put %get_quoted_str(IN_STR=898300 898311 898312 898313 898314 898315 898316 898317 898321 898322 898323 898324 
  898331 898332 898333 898341 898342 898343 898400 898401 898402 898403 898500 898501 898502 898503 898600 898601 
  898602 898603 898604 898605 898606 898607 898608 898609 898610 898611 898612 898613 898614 898615 898616 898617 
  898700 898701 898702 898703 898704 898705 898706 898800 898801 898901
  ,DLM=%str( ),QUOTE=%str(%")
  );

给出:

"898300" "898311" "898312" "898313" "898314" "898315" "898316" "898317" "898321" "898322" "898323" "898324" "898331" "898332" 
"898333" "898341" "898342" "898343" "898400" "898401" "898402" "898403" "898500" "898501" "898502" "898503" "898600" "898601" 
"898602" "898603" "898604" "898605" "898606" "898607" "898608" "898609" "898610" "898611" "898612" "898613" "898614" "898615" 
"898616" "898617" "898700" "898701" "898702" "898703" "898704" "898705" "898706" "898800" "898801" "898901"

然后可以将上述内容复制粘贴回程序..

答案 1 :(得分:0)

只要结果短于%SYSFUNC()限制,我通常只使用TRANWRD()函数调用。首先使用COMPBL()将多个空格压缩为一个。

%let list=A B C   D ;
%let qlist="%sysfunc(tranwrd(%sysfunc(compbl(&list)),%str( )," "))" ;