作为此问题的后续内容,我现有的答案似乎是最佳答案: Extracting sub-data from a SAS dataset & applying to a different dataset
鉴于数据集dsn_in
,我目前有一组包含数字数据的宏变量max_1
- max_N
。我还有一个包含变量列表的宏变量varlist
。这两组宏是相关的,max_1
与scan(&varlist, 1)
等相关联。我正在尝试将dsn_in
中varlist
中每个变量的数据值进行比较关联的比较值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;
非常感谢您提供的任何帮助。
答案 0 :(得分:2)
您在此处遇到的具体问题是您将SCAN放在等号的左侧。这是不允许的;允许以这种方式使用SUBSTR,但不允许使用SCAN。