我想在SAS Arrays上做一些帮助并做循环
我有一些代码几乎可以工作,并希望解释为什么它没有按预期工作。我希望计算数组中元素的最大值,采用由计算变量确定的有限数值。
DATA VALUES;
INPUT VAL;
DATALINES;
1
2
3
4
5
6
7
8
9
10
;
RUN;
%macro prueba(dataset);
DATA PRUEBA;
SET &dataset;
ARRAY DIAS(11) V1-V11 (4 5 6 7 8 9 10 88 75 46 71);
k = _n_ + 1;
IF k le dim(DIAS) THEN
%DO i = 1 %TO k;
Maxi = max(of V1 - V&i);
%END;
RUN;
%MEND;
%prueba(VALUES);
The error message:
A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
k
ERROR: The %TO value of the %DO I loop is invalid.
ERROR: The macro PRUEBA will stop executing.
由于
答案 0 :(得分:1)
错误消息告诉您%DO
循环的上限是字符串而不是数字。宏处理器将k
视为常量文本。
只需使用常规DO
循环。
%macro prueba(dataset);
DATA PRUEBA;
SET &dataset;
ARRAY DIAS(11) V1-V11 (4 5 6 7 8 9 10 88 75 46 71);
k = _n_ + 1;
do i=1 to min(k,dim(DIAS));
Maxi = max(maxi,dias(i));
end;
RUN;
%MEND;