この質問のフォローアップとして、私の既存の回答が最良のようです: Extracting sub-data from a SAS dataset & apply to a different dataset
dataset を指定すると、現在、数値データを含むdsn_in
一連のマクロ変数max_1
があります。変数のリストを含むmax_N
マクロ変数もあります。varlist
2 セットのマクロは、 などに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;
示す。scan
SAS関数の場合、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;
あなたが提供できるどんな助けも大歓迎です。