让示例宏变量为
%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
的变体
答案 0 :(得分:4)
在宏变量值上使用宏引用,以便逗号不会因调用countw()
函数而造成麻烦。使用q
和m
可选的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.;