0

作为这个问题的后续,我现有的答案似乎是最好的: Extracting sub-data from a SAS dataset & apply to a different dataset

给定一个 dataset ,我目前有一组包含数字数据dsn_in的宏变量。我还有一个包含变量列表的宏变量。这两组宏是相关的,例如与等相关联。我正在尝试将每个变量中的数据值与相关的比较值进行比较- 。我想将更新后的数据输出到. 这是我到目前为止所拥有的:max_1max_Nvarlistmax_1scan(&varlist, 1)dsn_invarlistmax_1max_Ndsn_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 是一个 SAS 函数时,它似乎同时被解释scan为一个数组和一个变量。

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;

您能提供的任何帮助将不胜感激。

4

1 回答 1

2

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

于 2013-03-28T20:32:10.297 回答