在数组SAS中使用微积分中的宏变量

时间:2017-01-02 16:12:41

标签: arrays loops sas

我想在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.

由于

1 个答案:

答案 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;