【问题标题】:What characters are used as wildcards in SAS?SAS 中使用哪些字符作为通配符?
【发布时间】:2019-09-16 23:32:45
【问题描述】:

我是正在学习 SAS 的 Stata 用户。 SAS 中使用哪些字符作为通配符?在 Stata 中,它是星号。我读到在 SAS 中你可以使用 : 作为后缀的通配符,但我需要相同的前缀。存在吗?

例如,如果我试图在我的数据集中查找包含字符串“findme”的任何变量,在 Stata 中我会这样做

list *findme*

指定变量可以在字符串“findme”之前或之后包含数字或字符。

什么是 SAS 等价物?谢谢。

【问题讨论】:

  • 您是在寻找变量名还是变量中包含的值?
  • 这个问题的框架好像我正在寻找任何带有字符串“findme”的变量名。但这个问题并不具体:我问的是在 SAS 中使用哪些字符作为通配符,无论我是在寻找变量名、值还是其他任何东西。

标签: sas


【解决方案1】:

在 SAS 中查找具有公共子字符串的列名列表的一种方法是查询元数据表,例如

data work.example;
length findme1 _findme _findme_ anothervar 8;
output;
run;

proc sql noprint;
  select name into :var_list 
    separated by ' ' 
    from dictionary.columns 
    where libname='WORK' 
      and memname ='EXAMPLE'
      and lowcase(name) like '%findme%'
      ;
quit;

%put &VAR_LIST;

没有一个通配符可以像: 那样用于前缀。但是,如果所有公共后缀变量按照数据集的列顺序形成一个连续列表,则可以使用如下所示的双破折号列表:

data work.example;
length b_findme c_findme a_findme anothervar 8;
output;
run;

data example_subset;
  set example (keep = b_findme--a_findme);
run;

如果您想要对变量名称进行更强大的通配符和模式匹配,最好的办法是按照我的答案的另一部分返回proc sql,并在 where 子句中使用 prxmatch('/your_regex_here/', name) 而不是 @987654327 @。然后你可以使用regular expressions 来选择你的变量。

【讨论】:

  • 感谢您回答我作为示例给出的场景。但是,无论我是在寻找变量名、值还是其他任何东西,我都试图找出在 SAS 中哪些字符用作通配符。通过查看您的答案,下划线或百分号是否可以做到这一点?还是没有?
  • SQL 运算符的LIKE 通配符是百分比%(任意数量的任意字符)和下划线_(任意字符)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2010-12-30
相关资源
最近更新 更多