在 SAS 宏字符串中删除字符逗号

drop the character comma in a SAS macro string

我想删除分配给宏变量的以下列表中的逗号: pop_freq_variabelen = nationaliteit_belg, urbanisatie_code, leeftijd1_code, ve_geslacht

我使用了以下 SAS 命令: %let varlist_ = %sysfunc(compress(&pop_freq_variabelen,','));

我收到以下消息: 错误:%SYSFUNC 或 %QSYSFUNC 宏函数引用的函数 COMPRESS 参数太多。 错误:宏 CREEER_MACRO_VARIABLEN 将停止执行。

我该如何解决这个问题?

提前致谢。

欢迎 :-)

这里的问题是宏变量&pop_freq_variabelen先解析。由于它包含一些逗号,压缩函数将给出错误,因为它将这些逗号视为参数分隔符。

您可以使用适当的宏引用函数来解决这个问题。

%let pop_freq_variabelen = nationaliteit_belg, urbanisatie_code, leeftijd1_code, ve_geslacht;
%let varlist_ = %sysfunc(compress(%bquote(&pop_freq_variabelen.),%str(,)));

%put &varlist_.;

当宏展开时,您的函数调用中有逗号。您需要保护逗号,以便 %SYSFUNC() 不会将它们视为参数分隔符。您还在要求 COMPRESS() 函数删除的字符列表中包含单引号。那么为什么不引用第一个参数来保护它可能有的任何逗号。您将需要使用双引号字符,以便解析宏变量引用。在要删除的字符列表中添加双引号既可以保护该逗号,也可以删除添加到第一个参数的引号。

%let varlist_ = %sysfunc(compress("&pop_freq_variabelen",","));