You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SAS中修改%let定义的列表值?适配SQL LIKE查询

解决SAS宏变量转换为LIKE查询格式的方法

你可以通过两种常用方式实现这个需求:

方法一:正则表达式快速替换(适合格式统一的场景)

利用SAS的prxchange函数直接批量替换宏变量里的元素格式,代码如下:

%let hi = ('g', 'c', 'v', 'd');
%let like_hi = %sysfunc(prxchange(s/'([a-z])'/'%$1%'/i, -1, &hi.));

/* 验证结果,日志会输出('%g%', '%c%', '%v%', '%d%') */
%put &like_hi.;

这个正则规则会匹配所有单引号包裹的单个字母,自动替换成%字母%的格式,-1表示替换所有匹配项,i表示不区分大小写(如果不需要可以去掉)。

方法二:宏循环逐个处理(灵活适配复杂场景)

如果你的元素格式可能不固定,比如有多字符的情况,可以用宏循环拆分元素后逐个处理:

%let hi = ('g', 'c', 'v', 'd');
/* 先清理宏变量里的括号和空格,得到纯元素列表 */
%let items = %sysfunc(compress(&hi., ()%str( )));
%let like_hi = ();
%let count = %sysfunc(countw(&items., %str(,)));

/* 循环处理每个元素 */
%do i=1 %to &count.;
    %let item = %scan(&items., &i., %str(,));
    %let item = %sysfunc(tranwrd(&item., ',', '')); /* 去掉元素的单引号 */
    %let like_item = '%&item.%'; /* 包裹成LIKE格式 */
    /* 拼接成最终列表 */
    %if &i. = 1 %then %let like_hi = (&like_item.;
    %else %let like_hi = &like_hi., &like_item.;
%end;
%let like_hi = &like_hi.);

%put &like_hi.;

在SQL查询中使用

转换后的&like_hi.可以直接用于LIKE ANY语法,简化查询:

proc sql;
    select * from your_table
    where your_column like any &like_hi.;
quit;

内容的提问来源于stack exchange,提问作者Irine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:02:34