prxchange函数

时间:2018-12-28 09:04:23

标签: sas

我对prxchange函数有疑问。 我有一个包含字母数字字符,特殊字符和空格的变量,我想获取没有数字和特殊字符的变量,但不删除空格

我使用:UPCASE(prxchange(" s/[^A-Z]//i",-1,variable)); 但是我得到的值没有空格

  • 我所拥有的:PROVA DB2.? RACF2
  • 我想要的是:PROVA DB RACF
  • 我从函数中获得的信息:PROVADBRACF

我该怎么办?谢谢, 码头

3 个答案:

答案 0 :(得分:0)

您可以使用:

UPCASE(prxchange(" s/[^A-Z\s\t]*//i",-1,variable));

\t-所有标签 \s-所有空格

代码:

data l;
variable="PROVA DB2.? RACF2";
v2=UPCASE(prxchange(" s/[^\w\s\t]//i",-1,variable));
run;

结果: PROVA DB RACF

答案 1 :(得分:0)

字符类中添加一个空格。我将空格放在了Z之后,尽管它也可能早于A

UPCASE(prxchange("s/[^A-Z ]//i",-1,variable));

可以在Perl Regular Expressions Tip Sheet

中找到SAS中的正则表达式的快速摘要。

否定的字符类说明符[^]枚举替换操作期间要保留(或不匹配)的字符。

[^A-Z]

方法不匹配字母AZ之间的任何字符,该字符不包含空格字符,因此空格将被删除。

您编写的用于替换的表达式是删除任何不匹配字母的序列

答案 2 :(得分:0)

如@dork horsten所述,在这种情况下,简单的压缩功能就足够了

dict1 = [{'12/21/18': 0,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1},
 {'12/21/18': 1,'12/22/18': 1,'12/23/18': 0,'12/24/18': 1},
 {'12/21/18': 0,'12/22/18': 1,'12/23/18': 0,'12/24/18': 0},
 {'12/21/18': 1,'12/22/18': 0,'12/23/18': 1,'12/24/18': 1}]
 df1 = pd.DataFrame(dict1, index= ['AAPL','CSCO','GE','MSFT' ])

 dict2 = [{'Ticker': 'AAPL','Date': '12/23/18'},
 {'Ticker': 'AAPL','Date': '12/24/18'},
 {'Ticker': 'CSCO','Date': '12/22/18'},
 {'Ticker': 'CSCO','Date': '12/24/18'},
 {'Ticker': 'GE',  'Date': '12/22/18'},
 {'Ticker': 'MSFT','Date': '12/24/18'}]
 df2 = pd.DataFrame(dict2)