包含引号和逗号的SAS宏变量的长度

时间:2018-04-19 17:21:07

标签: sas sas-macro

让示例宏变量为

%let temp="A","B","C";

如何获取此宏变量的数组长度,其中包括引号和逗号?例如,我想返回长度为3。

%let length_of_temp=%sysfunc(SOME_FUNC(&temp.));
%put length=length_of_temp;

LOG: length=3

最好我想使用一个已建立的SAS函数或代码行来完成它,而不是创建一个新的处理函数。以下是我到目前为止的尝试:

  • countw("&temp.",","):引号在尝试将其转换为字符串时会产生错误。
  

注意:由宏变量" TEMP"生成的行。 4
  "" A"" B"" C"

     

注49-169:引用字符串后标识符的含义可能在将来的SAS中发生变化                发布。在带引号的字符串和后续字符串之间插入空格                建议使用标识符。

     

ERROR 388-185:期待算术运算符。

  • countw(&temp.,",")count(&temp.):函数调用的典型错误包含太多参数
  • count((&temp.))dim((&temp.))
  • 上述
  • 中使用%superq的变体

3 个答案:

答案 0 :(得分:4)

在宏变量值上使用宏引用,以便逗号不会因调用countw()函数而造成麻烦。使用qm可选的countw()函数的第三个参数,让它知道不计算引号内的分隔符。

%let temp="A1,a2","B","C";
%let count = %sysfunc(countw(%superq(temp),%str(,),mq));

如果要计算数据步骤中的计数,则可以使用symget()函数来检索宏变量的值,而不是宏引用。

count = countw(symget('temp'),',','mq');

答案 1 :(得分:0)

这对我有用:

%let temp="A","B","C";

%let count = %sysfunc(countw("&temp", ","));
%put Number of elements = &count.;

结果:

8002  %put Number of elements = &count.;
Number of elements = 3

答案 2 :(得分:0)

%quote函数可能有助于掩盖引号:

%let count = %sysfunc(countw(%quote(&temp), ","));
%put Number of elements = &count.;