0

この質問のフォローアップとして、私の既存の回答が最良のようです: Extracting sub-data from a SAS dataset & apply to a different dataset

dataset を指定すると、現在、数値データを含むdsn_in一連のマクロ変数max_1があります。変数のリストを含むmax_Nマクロ変数もあります。varlist2 セットのマクロは、 などにmax_1関連付けられているように関連付けられています。各変数内のデータ値を、関連付けられた比較値とscan(&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;示す。scanSAS関数の場合、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;

あなたが提供できるどんな助けも大歓迎です。

4

1 に答える 1

2

ここでの具体的な問題は、等号の左側に SCAN を配置することです。それは許されません。SUBSTR はこの方法で使用できますが、SCAN は使用できません。

于 2013-03-28T20:32:10.297 に答える