使用扫描时出错(& varlist)+宏变量比较

时间:2013-03-28 20:23:56

标签: sas sas-macro

作为此问题的后续内容,我现有的答案似乎是最佳答案: Extracting sub-data from a SAS dataset & applying to a different dataset

鉴于数据集dsn_in,我目前有一组包含数字数据的宏变量max_1 - max_N。我还有一个包含变量列表的宏变量varlist。这两组宏是相关的,max_1scan(&varlist, 1)等相关联。我正在尝试将dsn_invarlist中每个变量的数据值进行比较关联的比较值max_1 - max_N。我想将更新的数据输出到dsn_out。以下是我到目前为止的情况:

data dsn_out;
  set dsn_in;

  /* scan list of variables and compare to decision criteria.
     if > decision criteria, cap variable */
  do i = 1 by 1 while(scan(&varlist, i) ~= '');
    if scan("&varlist.", i) > input(symget('max_' || left(put(i, 2.))), best12.) then   
    scan("&varlist.", i) = input(symget('max_' || left(put(i, 2.))), best12.);
  end;  
run;

但是,我收到以下错误,我不明白。显示options mprint;。 SAS似乎是将scan解释为数组和变量,当它是SAS函数时。

ERROR: Undeclared array referenced: scan.
MPRINT(OUTLIERS_MAX):   if scan("var1 var2 var3 ... varN", i) > input(symget('max_' 
|| left(put(i, 2.))), best12.) then scan("var1 var2 var3 ... varN", i) = 
input(symget('max_' || left(put(i, 2.))), best12.);
ERROR: Variable scan has not been declared as an array.
MPRINT(OUTLIERS_MAX):   end;
MPRINT(OUTLIERS_MAX):   run;

非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

您在此处遇到的具体问题是您将SCAN放在等号的左侧。这是不允许的;允许以这种方式使用SUBSTR,但不允许使用SCAN。